Blaster Master + other fixes
[fceu.git] / fce.c
diff --git a/fce.c b/fce.c
index 79aa4be..3cb0632 100644 (file)
--- a/fce.c
+++ b/fce.c
@@ -104,7 +104,7 @@ static int RWWrap=0;
 static void asmcpu_update(int32 cycles)
 {
  // timestamp..
- timestamp += ((cycles >> 4) * 43) >> 7; // aproximating /= 48
//timestamp += ((cycles >> 4) * 43) >> 7; // aproximating /= 48
 
  // some code from x6502.c
  fhcnt-=cycles;
@@ -140,7 +140,7 @@ void asmcpu_unpack(void)
        X6502_Rebase_a();
        nes_registers[4] = X.S << 24;
        nes_registers[4]|= X.IRQlow << 8;
-       nes_registers[7] = (uint32)X.count;
+       nes_registers[7] = (uint32)X.count << 16;
 
        // NVUB DIZC
        nes_registers[4]|= X.P & 0x5d;
@@ -156,7 +156,7 @@ void asmcpu_pack(void)
        X.PC= nes_registers[3] - pc_base;
        X.S = nes_registers[4] >> 24;
        X.IRQlow = nes_registers[4] >> 8;
-       X.count = (int32) nes_registers[7];
+       X.count = (int32) nes_registers[7] >> 16;
 
        // NVUB DIZC
        X.P = nes_registers[4] & 0x5d;
@@ -1190,9 +1190,15 @@ void EmLoop(void)
   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;