cmdline parser fix, missing init stuff
[fceu.git] / fce.c
diff --git a/fce.c b/fce.c
index 1e82efb..d540aff 100644 (file)
--- a/fce.c
+++ b/fce.c
@@ -39,6 +39,7 @@
 #include       "fds.h"
 #include       "ines.h"
 #include       "unif.h"
+#include       "vsuni.h"
 #include        "cheat.h"
 
 #include       "state.h"
@@ -145,6 +146,8 @@ void asmcpu_unpack(void)
        X6502_Rebase_a();
        nes_registers[4] = X.S << 24;
        nes_registers[4]|= X.IRQlow << 8;
+       if (MapIRQHook)
+               nes_registers[4] |= 1<<16; // MapIRQHook set bit
        nes_registers[7] = (uint32)X.count << 16;
 
        // NVUB DIZC
@@ -604,17 +607,25 @@ void FCEUI_FrameSkip(int x)
 static void LineUpdate(uint8 *target)
 {
        uint32 tem;
+       int y;
 
        /* PRefreshLine() will not get called on skipped frames.  This
         * could cause a problem, but the solution would be rather complex,
         * due to the current sprite 0 hit code.
         */
-       if(FSkip) return;
+       if(FSkip)
+       {
+        y=(int)SPRAM[0] + 1;
+        if(scanline==y && SpriteON) PPU_status|=0x40; // hack
+        return;
+       }
 
        if(scanline < FSettings.FirstSLine || scanline > FSettings.LastSLine)
        {
           if(PPU_hook)
            PRefreshLine();
+          y=(int)SPRAM[0] + 1;
+          if(scanline==y && SpriteON) PPU_status|=0x40;
        }
        else
        {
@@ -1382,6 +1393,12 @@ void EmLoop(void)
   }
 
 update:
+  if(Exit)
+  {
+   //CloseGame();
+   break;
+  }
+
   {
    int ssize;
 
@@ -1405,12 +1422,6 @@ update:
    }
   }
 
-  if(Exit)
-  {
-   //CloseGame();
-   break;
-  }
-
  } // for
 }
 
@@ -1506,15 +1517,18 @@ void PowerNES(void)
         memset(RAM,0x00,0x800);
 #endif
         ResetMapping();
-       GameInterface(GI_POWER, 0);
         PowerSound();
        PowerPPU();
-       timestampbase=0;
+       GameInterface(GI_POWER, 0);
+        if(FCEUGameInfo.type==GIT_VSUNI)
+         FCEU_VSUniPower();
 #ifdef ASM_6502
        if (geniestage)
         GenieSetPages(0);
 #endif
+       timestampbase=0;
        X6502_Power();
+       FCEU_PowerCheats();
 }