more properly handling new haa semantics
[drnoksnes] / cpuexec.cpp
index be5bf02..40fdaf9 100644 (file)
@@ -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 (;;) {\r
-               APU_EXECUTE(1);\r
-               if (CPU.Flags) {\r
-                       if (CPU.Flags & NMI_FLAG) {\r
-                               if (--CPU.NMICycleCount == 0) {\r
-                                       CPU.Flags &= ~NMI_FLAG;\r
-                                       if (CPU.WaitingForInterrupt) {\r
-                                               CPU.WaitingForInterrupt = FALSE;\r
-                                               CPU.PC++;\r
-                                       }\r
-                                       S9xOpcode_NMI ();\r
-                               }\r
-                       }\r
-\r
-                       if (CPU.Flags & IRQ_PENDING_FLAG) {\r
-                               if (CPU.IRQCycleCount == 0)     {\r
-                                       if (CPU.WaitingForInterrupt) {\r
-                                               CPU.WaitingForInterrupt = FALSE;\r
-                                               CPU.PC++;\r
-                                       }\r
-                                       if (CPU.IRQActive && !Settings.DisableIRQ) {\r
+       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 ();\r
-                                       } else {\r
+                                                       S9xOpcode_IRQ ();
+                                       } else {
                                                CPU.Flags &= ~IRQ_PENDING_FLAG;
-                                       }\r
-                               } else {\r
+                                       }
+                               } else {
                                        CPU.IRQCycleCount--;
-                               }\r
+                               }
                        }
-\r
-                       if (CPU.Flags & SCAN_KEYS_FLAG)\r
-                               break;\r
-               }\r
-\r
-#ifdef CPU_SHUTDOWN\r
-               CPU.PCAtOpcodeStart = CPU.PC;\r
-#endif\r
-               CPU.Cycles += CPU.MemSpeed;\r
-\r
-               (*ICPU.S9xOpcodes[*CPU.PC++].S9xOpcode) ();\r
 
-#ifdef USE_SA1\r
-               if (SA1.Executing)\r
+                       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
-\r
+
                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)