X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fce.c;h=51e66213f268c45d4e034c5b9e7795cc2b33d776;hb=ca5c359d908ce4d89239f3250a7c227d062b32e0;hp=1e82efb51a5f68dc1b64257a7a4182b4372792fe;hpb=078eb4c0d0ff99a90f5ea0f9a9dbf9ec780650cc;p=fceu.git diff --git a/fce.c b/fce.c index 1e82efb..51e6621 100644 --- a/fce.c +++ b/fce.c @@ -145,6 +145,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 +606,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 +1392,12 @@ void EmLoop(void) } update: + if(Exit) + { + //CloseGame(); + break; + } + { int ssize; @@ -1405,12 +1421,6 @@ update: } } - if(Exit) - { - //CloseGame(); - break; - } - } // for } @@ -1506,9 +1516,9 @@ void PowerNES(void) memset(RAM,0x00,0x800); #endif ResetMapping(); - GameInterface(GI_POWER, 0); PowerSound(); PowerPPU(); + GameInterface(GI_POWER, 0); timestampbase=0; #ifdef ASM_6502 if (geniestage)