X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=fceu.git;a=blobdiff_plain;f=fce.c;h=abcf10f521adbfdc72f9b783c1a1b9372b284430;hp=64bb8dcdde29626b1cd1b66ee6b49ce83dee24c3;hb=68eb34ef8b43287bd29b1d7074536189c56e2e32;hpb=92e249b10ad9e479eddb18974555366dba725ef3 diff --git a/fce.c b/fce.c index 64bb8dc..abcf10f 100644 --- a/fce.c +++ b/fce.c @@ -48,13 +48,10 @@ #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); @@ -140,7 +137,7 @@ void asmcpu_unpack(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; @@ -314,15 +311,9 @@ static DECLFR(ARAMH) 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); } @@ -335,9 +326,6 @@ static DECLFR(A2007) { 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); @@ -353,9 +341,6 @@ static DECLFR(A2007) if (INC32) RefreshAddr+=32; else RefreshAddr++; if(PPU_hook) PPU_hook(RefreshAddr&0x3fff); -#ifdef DEBUG_ASM_6502 - cpu_lastval=ret; -#endif return ret; } @@ -481,16 +466,9 @@ static DECLFW(B4014) { 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) @@ -1026,28 +1004,54 @@ void ResetGameLoaded(void) 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."); @@ -1076,6 +1080,9 @@ FCEUGI *FCEUI_LoadGame(char *name) FCEU_ResetPalette(); Exit=0; + + if (have_movie) + FCEUI_LoadMovie(name, 1); return(&FCEUGameInfo); } @@ -1183,9 +1190,15 @@ void EmLoop(void) else if(VBlankON) TriggerNMI(); - X6502_Run(256+85-12); - for(scanline=242+1;scanline