#include "crc32.h"
#include "ppu.h"
-#define Pal (PALRAM)
+#include "movie.h"
+#define Pal (PALRAM)
-#ifdef DEBUG_ASM_6502
-extern int cpu_repeat;
-extern int cpu_lastval;
-#endif
static void (*RefreshLine)(uint8 *P, uint32 vofs) = NULL;
static void PRefreshLine(void);
nes_registers[2] = X.Y;
pc_base = 0;
nes_registers[3] = X.PC;
- X6502_rebase_a();
+ X6502_Rebase_a();
nes_registers[4] = X.S << 24;
nes_registers[4]|= X.IRQlow << 8;
nes_registers[7] = (uint32)X.count;
static DECLFR(A2002)
{
uint8 ret;
-#ifdef DEBUG_ASM_6502
- if (cpu_repeat) return cpu_lastval;
-#endif
ret = PPU_status;
vtoggle=0;
PPU_status&=0x7F;
-#ifdef DEBUG_ASM_6502
- cpu_lastval=ret|(PPUGenLatch&0x1F);
-#endif
return ret|(PPUGenLatch&0x1F);
}
{
uint8 ret;
uint32 tmp=RefreshAddr&0x3FFF;
-#ifdef DEBUG_ASM_6502
- if (cpu_repeat) return cpu_lastval;
-#endif
PPUGenLatch=ret=VRAMBuffer;
if(PPU_hook) PPU_hook(tmp);
if (INC32) RefreshAddr+=32;
else RefreshAddr++;
if(PPU_hook) PPU_hook(RefreshAddr&0x3fff);
-#ifdef DEBUG_ASM_6502
- cpu_lastval=ret;
-#endif
return ret;
}
{
uint32 t=V<<8;
int x;
-#ifdef DEBUG_ASM_6502
- if (cpu_repeat) { X6502_AddCycles_a(512); return; }
- for(x=0;x<256;x++)
- B2004(0x2004,X.DB=ARead[t+x](t+x));
- X6502_AddCycles_c(512);
-#else
for(x=0;x<256;x++)
B2004(0x2004,X.DB=ARead[t+x](t+x));
X6502_AddCycles(512);
-#endif
}
void BGRender(uint8 *target)
FCEUGameInfo.inputfc=-1;
}
+char lastLoadedGameName [2048];
+
FCEUGI *FCEUI_LoadGame(char *name)
{
+ char name2[512];
+ int have_movie = 0;
int fp;
Exit=1;
ResetGameLoaded();
- fp=FCEU_fopen(name,"rb");
+ strncpy(name2, name, sizeof(name2));
+ name2[sizeof(name2)-1] = 0;
+
+ fp=FCEU_fopen(name2,"rb");
if(!fp)
{
FCEU_PrintError("Error opening \"%s\"!",name);
return 0;
}
- GetFileBase(name);
- if(iNESLoad(name,fp))
+ {
+ char *p = name2 + strlen(name2) - 4;
+ if (strcmp(p, ".fcm") == 0)
+ {
+ // movie detected
+ printf("movie detected\n");
+ FCEU_fclose(fp);
+ *p = 0;
+ fp=FCEU_fopen(name2,"rb");
+ if (!fp) {
+ printf("no ROM for movie\n");
+ return 0;
+ }
+ have_movie = 1;
+ }
+ }
+
+ strcpy(lastLoadedGameName, name2);
+
+ GetFileBase(name2);
+ if(iNESLoad(name2,fp))
goto endlseq;
if(NSFLoad(fp))
goto endlseq;
- if(FDSLoad(name,fp))
+ if(FDSLoad(name2,fp))
goto endlseq;
- if(UNIFLoad(name,fp))
+ if(UNIFLoad(name2,fp))
goto endlseq;
FCEU_PrintError("An error occurred while loading the file.");
FCEU_ResetPalette();
Exit=0;
+
+ if (have_movie)
+ FCEUI_LoadMovie(name, 1);
return(&FCEUGameInfo);
}
else if(VBlankON)
TriggerNMI();
- X6502_Run(256+85-12);
- for(scanline=242+1;scanline<scanlines_per_frame;scanline++)
- X6502_Run(256+85);
+ // Note: this is needed for asm core
+ // Warning: using 'scanline' var here breaks Castlevania III
+ {
+ int lines;
+ X6502_Run(256+85-12);
+ for (lines=scanlines_per_frame-242-1;lines;lines--)
+ X6502_Run(256+85);
+ }
+ // X6502_Run((scanlines_per_frame-242)*(256+85)-12);
PPU_status&=0x1f;
GeniePower();
-printf("X.DB offs: %02x\n", (int)&X.DB - (int)&X);
-
memset(RAM,0x00,0x800);
ResetMapping();
GameInterface(GI_POWER);