X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=cpuexec.cpp;h=40fdaf9b6d9183a4822a34e4f41d4cec10b9fab0;hb=338944fbda262ecd7741d19ec9bc00e854a7dce5;hp=be5bf029c69e8c6d1f32146e847fbff383aeb80b;hpb=d32fb75f49f2e8d63e1826e249c6bf9d54546ed3;p=drnoksnes diff --git a/cpuexec.cpp b/cpuexec.cpp index be5bf02..40fdaf9 100644 --- a/cpuexec.cpp +++ b/cpuexec.cpp @@ -80,64 +80,66 @@ void S9xMainLoop (void) char stra[64]; sprintf(stra,"framecpt : %d",framecpt); S9xMessage(0,0,stra); -#endif +#endif #if CONF_BUILD_ASM_CPU asmMainLoop(&CPU); #else - for (;;) { - APU_EXECUTE(1); - if (CPU.Flags) { - if (CPU.Flags & NMI_FLAG) { - if (--CPU.NMICycleCount == 0) { - CPU.Flags &= ~NMI_FLAG; - if (CPU.WaitingForInterrupt) { - CPU.WaitingForInterrupt = FALSE; - CPU.PC++; - } - S9xOpcode_NMI (); - } - } - - if (CPU.Flags & IRQ_PENDING_FLAG) { - if (CPU.IRQCycleCount == 0) { - if (CPU.WaitingForInterrupt) { - CPU.WaitingForInterrupt = FALSE; - CPU.PC++; - } - if (CPU.IRQActive && !Settings.DisableIRQ) { + for (;;) { + APU_EXECUTE(1); + if (CPU.Flags) { + if (CPU.Flags & NMI_FLAG) { + if (--CPU.NMICycleCount == 0) { + CPU.Flags &= ~NMI_FLAG; + if (CPU.WaitingForInterrupt) { + CPU.WaitingForInterrupt = FALSE; + CPU.PC++; + } + S9xOpcode_NMI (); + } + } + + if (CPU.Flags & IRQ_PENDING_FLAG) { + if (CPU.IRQCycleCount == 0) { + if (CPU.WaitingForInterrupt) { + CPU.WaitingForInterrupt = FALSE; + CPU.PC++; + } + if (CPU.IRQActive && !Settings.DisableIRQ) { if (!CheckFlag(IRQ)) - S9xOpcode_IRQ (); - } else { + S9xOpcode_IRQ (); + } else { CPU.Flags &= ~IRQ_PENDING_FLAG; - } - } else { + } + } else { CPU.IRQCycleCount--; - } + } } - - if (CPU.Flags & SCAN_KEYS_FLAG) - break; - } - -#ifdef CPU_SHUTDOWN - CPU.PCAtOpcodeStart = CPU.PC; -#endif - CPU.Cycles += CPU.MemSpeed; - - (*ICPU.S9xOpcodes[*CPU.PC++].S9xOpcode) (); -#ifdef USE_SA1 - if (SA1.Executing) + if (CPU.Flags & SCAN_KEYS_FLAG) + break; + } + +#ifdef CPU_SHUTDOWN + CPU.PCAtOpcodeStart = CPU.PC; +#endif + CPU.Cycles += CPU.MemSpeed; + + (*ICPU.S9xOpcodes[*CPU.PC++].S9xOpcode) (); + +#ifdef USE_SA1 + if (SA1.Executing) S9xSA1MainLoop (); #endif - + DO_HBLANK_CHECK (); } #endif Registers.PC = CPU.PC - CPU.PCBase; - //S9xPackStatus (); // not needed +#if !CONF_BUILD_ASM_CPU + S9xPackStatus (); +#endif S9xAPUPackStatus (); if (CPU.Flags & SCAN_KEYS_FLAG) @@ -237,17 +239,6 @@ void S9xDoHBlankProcessing () CPU.Flags |= NMI_FLAG; CPU.NMICycleCount = CPU.NMITriggerPoint; } - - #ifdef OLD_SNAPSHOT_CODE - if (CPU.Flags & SAVE_SNAPSHOT_FLAG) - { - CPU.Flags &= ~SAVE_SNAPSHOT_FLAG; - Registers.PC = CPU.PC - CPU.PCBase; - //S9xPackStatus (); // not needed - S9xAPUPackStatus (); - Snapshot (NULL); - } - #endif } if (CPU.V_Counter == PPU.ScreenHeight + 3)