mapper fixes for ncpu, debug is broken atm
[fceu.git] / fce.c
diff --git a/fce.c b/fce.c
index 64bb8dc..1d5b493 100644 (file)
--- a/fce.c
+++ b/fce.c
@@ -48,6 +48,8 @@
 #include       "crc32.h"
 #include        "ppu.h"
 
+#include        "movie.h"
+
 #define Pal     (PALRAM)
 
 
@@ -140,7 +142,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;
@@ -321,7 +323,7 @@ static DECLFR(A2002)
                         vtoggle=0;
                         PPU_status&=0x7F;
 #ifdef DEBUG_ASM_6502
-       cpu_lastval=ret|(PPUGenLatch&0x1F);
+//     cpu_lastval=ret|(PPUGenLatch&0x1F);
 #endif
                         return ret|(PPUGenLatch&0x1F);
 }
@@ -354,7 +356,7 @@ static DECLFR(A2007)
                         else RefreshAddr++;
                        if(PPU_hook) PPU_hook(RefreshAddr&0x3fff);
 #ifdef DEBUG_ASM_6502
-       cpu_lastval=ret;
+//     cpu_lastval=ret;
 #endif
                         return ret;
 }
@@ -481,16 +483,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 +1021,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 +1097,9 @@ FCEUGI *FCEUI_LoadGame(char *name)
 
        FCEU_ResetPalette();
         Exit=0;
+
+       if (have_movie)
+               FCEUI_LoadMovie(name, 1);
         return(&FCEUGameInfo);
 }
 
@@ -1336,8 +1360,6 @@ void PowerNES(void)
 
         GeniePower();
 
-printf("X.DB offs: %02x\n", (int)&X.DB - (int)&X);
-
         memset(RAM,0x00,0x800);
         ResetMapping();
        GameInterface(GI_POWER);