aboutsummaryrefslogtreecommitdiff
path: root/source/cpuexec.c
diff options
context:
space:
mode:
authoraliaspider2014-10-30 00:23:30 +0100
committeraliaspider2014-10-30 00:23:30 +0100
commit804169dd621a3ad3eec1a32ce30350de667fee80 (patch)
tree5bce839a3652f6725d50639cccd3f589ee901515 /source/cpuexec.c
parent5382d193371c8db303d056b87b8ffd51316bf2e0 (diff)
downloadsnes9x2005-804169dd621a3ad3eec1a32ce30350de667fee80.tar.gz
snes9x2005-804169dd621a3ad3eec1a32ce30350de667fee80.tar.bz2
snes9x2005-804169dd621a3ad3eec1a32ce30350de667fee80.zip
apply a facelift
Diffstat (limited to 'source/cpuexec.c')
-rw-r--r--source/cpuexec.c1308
1 files changed, 658 insertions, 650 deletions
diff --git a/source/cpuexec.c b/source/cpuexec.c
index 02c4edd..e015863 100644
--- a/source/cpuexec.c
+++ b/source/cpuexec.c
@@ -1,6 +1,6 @@
/*******************************************************************************
Snes9x - Portable Super Nintendo Entertainment System (TM) emulator.
-
+
(c) Copyright 1996 - 2002 Gary Henderson (gary.henderson@ntlworld.com) and
Jerremy Koot (jkoot@snes9x.com)
@@ -43,46 +43,46 @@
S-DD1 C emulator code
(c) Copyright 2003 Brad Jorsch with research by
Andreas Naive and John Weidman
-
+
S-RTC C emulator code
(c) Copyright 2001 John Weidman
-
+
ST010 C++ emulator code
(c) Copyright 2003 Feather, Kris Bleakley, John Weidman and Matthew Kendora
- Super FX x86 assembler emulator code
- (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault
+ Super FX x86 assembler emulator code
+ (c) Copyright 1998 - 2003 zsKnight, _Demo_, and pagefault
- Super FX C emulator code
+ Super FX C emulator code
(c) Copyright 1997 - 1999 Ivar, Gary Henderson and John Weidman
SH assembler code partly based on x86 assembler code
- (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
+ (c) Copyright 2002 - 2004 Marcus Comstedt (marcus@mc.pp.se)
+
-
Specific ports contains the works of other authors. See headers in
individual files.
-
+
Snes9x homepage: http://www.snes9x.com
-
+
Permission to use, copy, modify and distribute Snes9x in both binary and
source form, for non-commercial purposes, is hereby granted without fee,
providing that this license information and copyright notice appear with
all copies and any derived work.
-
+
This software is provided 'as-is', without any express or implied
warranty. In no event shall the authors be held liable for any damages
arising from the use of this software.
-
+
Snes9x is freeware for PERSONAL USE only. Commercial users should
seek permission of the copyright holders first. Commercial use includes
charging money for Snes9x or software derived from Snes9x.
-
+
The copyright holders request that bug fixes and improvements to the code
should be forwarded to them so everyone can benefit from the modifications
in future versions.
-
+
Super NES and Super Nintendo Entertainment System are trademarks of
Nintendo Co., Limited and its subsidiary companies.
*******************************************************************************/
@@ -108,12 +108,12 @@
#include "display.h"
#endif
-extern void S9xProcessSound (unsigned int);
+extern void S9xProcessSound(unsigned int);
-void S9xMainLoop_SA1_SFX (void);
-void S9xMainLoop_SA1_NoSFX (void);
-void S9xMainLoop_NoSA1_SFX (void);
-void S9xMainLoop_NoSA1_NoSFX (void);
+void S9xMainLoop_SA1_SFX(void);
+void S9xMainLoop_SA1_NoSFX(void);
+void S9xMainLoop_NoSA1_SFX(void);
+void S9xMainLoop_NoSA1_NoSFX(void);
/*
* This is a CATSFC modification inspired by a Snes9x-Euphoria modification.
@@ -124,336 +124,352 @@ void S9xMainLoop_NoSA1_NoSFX (void);
* to propagate modifications to the SA1_NoSFX, NoSA1_SFX and NoSA1_NoSFX
* versions.
*/
-void S9xMainLoop (void)
+void S9xMainLoop(void)
{
- if (Settings.SA1)
- {
- if (Settings.SuperFX) S9xMainLoop_SA1_SFX ();
- else /* if (!Settings.SuperFX) */ S9xMainLoop_SA1_NoSFX ();
- }
- else /* if (!Settings.SA1) */
- {
- if (Settings.SuperFX) S9xMainLoop_NoSA1_SFX ();
- else /* if (!Settings.SuperFX) */ S9xMainLoop_NoSA1_NoSFX ();
- }
+ if (Settings.SA1)
+ {
+ if (Settings.SuperFX) S9xMainLoop_SA1_SFX();
+ else /* if (!Settings.SuperFX) */ S9xMainLoop_SA1_NoSFX();
+ }
+ else /* if (!Settings.SA1) */
+ {
+ if (Settings.SuperFX) S9xMainLoop_NoSA1_SFX();
+ else /* if (!Settings.SuperFX) */ S9xMainLoop_NoSA1_NoSFX();
+ }
}
-void S9xMainLoop_SA1_SFX (void)
+void S9xMainLoop_SA1_SFX(void)
{
- for (;;)
- {
- APU_EXECUTE ();
-
- 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 ();
- }
- }
-
- CHECK_SOUND ();
-
- 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
- CPU.Flags &= ~IRQ_PENDING_FLAG;
- }
- else
- {
- if(--CPU.IRQCycleCount==0 && CheckFlag (IRQ))
- CPU.IRQCycleCount=1;
- }
- }
-
- if (CPU.Flags & SCAN_KEYS_FLAG)
- break;
- }
+ for (;;)
+ {
+ APU_EXECUTE();
+
+ 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();
+ }
+ }
+
+ CHECK_SOUND();
+
+ 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
+ CPU.Flags &= ~IRQ_PENDING_FLAG;
+ }
+ else
+ {
+ if (--CPU.IRQCycleCount == 0 && CheckFlag(IRQ))
+ CPU.IRQCycleCount = 1;
+ }
+ }
+
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ break;
+ }
#ifdef CPU_SHUTDOWN
- CPU.PCAtOpcodeStart = CPU.PC;
+ CPU.PCAtOpcodeStart = CPU.PC;
#endif
- CPU.Cycles += CPU.MemSpeed;
-
- (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode) ();
-
- if (SA1.Executing)
- S9xSA1MainLoop ();
- DO_HBLANK_CHECK_SFX();
- }
-
- ICPU.Registers.PC = CPU.PC - CPU.PCBase;
- S9xPackStatus ();
- IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
- S9xAPUPackStatus ();
- if (CPU.Flags & SCAN_KEYS_FLAG)
- {
- S9xSyncSpeed ();
- CPU.Flags &= ~SCAN_KEYS_FLAG;
- }
+ CPU.Cycles += CPU.MemSpeed;
+
+ (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode)();
+
+ if (SA1.Executing)
+ S9xSA1MainLoop();
+ DO_HBLANK_CHECK_SFX();
+ }
+
+ ICPU.Registers.PC = CPU.PC - CPU.PCBase;
+ S9xPackStatus();
+ IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
+ S9xAPUPackStatus();
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ {
+ S9xSyncSpeed();
+ CPU.Flags &= ~SCAN_KEYS_FLAG;
+ }
#ifdef DETECT_NASTY_FX_INTERLEAVE
- if (CPU.BRKTriggered && Settings.SuperFX && !CPU.TriedInterleavedMode2)
- {
- CPU.TriedInterleavedMode2 = TRUE;
- CPU.BRKTriggered = FALSE;
- S9xDeinterleaveMode2 ();
- }
+ if (CPU.BRKTriggered && Settings.SuperFX && !CPU.TriedInterleavedMode2)
+ {
+ CPU.TriedInterleavedMode2 = TRUE;
+ CPU.BRKTriggered = FALSE;
+ S9xDeinterleaveMode2();
+ }
#endif
}
-void S9xMainLoop_SA1_NoSFX (void)
+void S9xMainLoop_SA1_NoSFX(void)
{
- for (;;)
- {
- APU_EXECUTE ();
-
- 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 ();
- }
- }
-
- CHECK_SOUND ();
-
- 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
- CPU.Flags &= ~IRQ_PENDING_FLAG;
- }
- else
- {
- if(--CPU.IRQCycleCount==0 && CheckFlag (IRQ))
- CPU.IRQCycleCount=1;
- }
- }
-
- if (CPU.Flags & SCAN_KEYS_FLAG)
- break;
- }
+ for (;;)
+ {
+ APU_EXECUTE();
+
+ 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();
+ }
+ }
+
+ CHECK_SOUND();
+
+ 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
+ CPU.Flags &= ~IRQ_PENDING_FLAG;
+ }
+ else
+ {
+ if (--CPU.IRQCycleCount == 0 && CheckFlag(IRQ))
+ CPU.IRQCycleCount = 1;
+ }
+ }
+
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ break;
+ }
#ifdef CPU_SHUTDOWN
- CPU.PCAtOpcodeStart = CPU.PC;
+ CPU.PCAtOpcodeStart = CPU.PC;
#endif
- CPU.Cycles += CPU.MemSpeed;
-
- (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode) ();
-
- if (SA1.Executing)
- S9xSA1MainLoop ();
- DO_HBLANK_CHECK_NoSFX();
- }
-
- ICPU.Registers.PC = CPU.PC - CPU.PCBase;
- S9xPackStatus ();
- IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
- S9xAPUPackStatus ();
- if (CPU.Flags & SCAN_KEYS_FLAG)
- {
- S9xSyncSpeed ();
- CPU.Flags &= ~SCAN_KEYS_FLAG;
- }
+ CPU.Cycles += CPU.MemSpeed;
+
+ (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode)();
+
+ if (SA1.Executing)
+ S9xSA1MainLoop();
+ DO_HBLANK_CHECK_NoSFX();
+ }
+
+ ICPU.Registers.PC = CPU.PC - CPU.PCBase;
+ S9xPackStatus();
+ IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
+ S9xAPUPackStatus();
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ {
+ S9xSyncSpeed();
+ CPU.Flags &= ~SCAN_KEYS_FLAG;
+ }
}
-void S9xMainLoop_NoSA1_SFX (void)
+void S9xMainLoop_NoSA1_SFX(void)
{
- for (;;)
- {
- APU_EXECUTE ();
-
- 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 ();
- }
- }
-
- CHECK_SOUND ();
-
- 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
- CPU.Flags &= ~IRQ_PENDING_FLAG;
- }
- else
- {
- if(--CPU.IRQCycleCount==0 && CheckFlag (IRQ))
- CPU.IRQCycleCount=1;
- }
- }
-
- if (CPU.Flags & SCAN_KEYS_FLAG)
- break;
- }
+ for (;;)
+ {
+ APU_EXECUTE();
+
+ 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();
+ }
+ }
+
+ CHECK_SOUND();
+
+ 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
+ CPU.Flags &= ~IRQ_PENDING_FLAG;
+ }
+ else
+ {
+ if (--CPU.IRQCycleCount == 0 && CheckFlag(IRQ))
+ CPU.IRQCycleCount = 1;
+ }
+ }
+
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ break;
+ }
#ifdef CPU_SHUTDOWN
- CPU.PCAtOpcodeStart = CPU.PC;
+ CPU.PCAtOpcodeStart = CPU.PC;
#endif
- CPU.Cycles += CPU.MemSpeed;
-
- (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode) ();
-
- DO_HBLANK_CHECK_SFX();
- }
-
- ICPU.Registers.PC = CPU.PC - CPU.PCBase;
- S9xPackStatus ();
- IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
- S9xAPUPackStatus ();
- if (CPU.Flags & SCAN_KEYS_FLAG)
- {
- S9xSyncSpeed ();
- CPU.Flags &= ~SCAN_KEYS_FLAG;
- }
+ CPU.Cycles += CPU.MemSpeed;
+
+ (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode)();
+
+ DO_HBLANK_CHECK_SFX();
+ }
+
+ ICPU.Registers.PC = CPU.PC - CPU.PCBase;
+ S9xPackStatus();
+ IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
+ S9xAPUPackStatus();
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ {
+ S9xSyncSpeed();
+ CPU.Flags &= ~SCAN_KEYS_FLAG;
+ }
#ifdef DETECT_NASTY_FX_INTERLEAVE
- if (CPU.BRKTriggered && Settings.SuperFX && !CPU.TriedInterleavedMode2)
- {
- CPU.TriedInterleavedMode2 = TRUE;
- CPU.BRKTriggered = FALSE;
- S9xDeinterleaveMode2 ();
- }
+ if (CPU.BRKTriggered && Settings.SuperFX && !CPU.TriedInterleavedMode2)
+ {
+ CPU.TriedInterleavedMode2 = TRUE;
+ CPU.BRKTriggered = FALSE;
+ S9xDeinterleaveMode2();
+ }
#endif
}
-void S9xMainLoop_NoSA1_NoSFX (void)
+void S9xMainLoop_NoSA1_NoSFX(void)
{
- for (;;)
- {
- APU_EXECUTE ();
-
- 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 ();
- }
- }
-
- CHECK_SOUND ();
-
- 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
- CPU.Flags &= ~IRQ_PENDING_FLAG;
- }
- else
- {
- if(--CPU.IRQCycleCount==0 && CheckFlag (IRQ))
- CPU.IRQCycleCount=1;
- }
- }
-
- if (CPU.Flags & SCAN_KEYS_FLAG)
- break;
- }
+ for (;;)
+ {
+ APU_EXECUTE();
+
+ 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();
+ }
+ }
+
+ CHECK_SOUND();
+
+ 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
+ CPU.Flags &= ~IRQ_PENDING_FLAG;
+ }
+ else
+ {
+ if (--CPU.IRQCycleCount == 0 && CheckFlag(IRQ))
+ CPU.IRQCycleCount = 1;
+ }
+ }
+
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ break;
+ }
#ifdef CPU_SHUTDOWN
- CPU.PCAtOpcodeStart = CPU.PC;
+ CPU.PCAtOpcodeStart = CPU.PC;
#endif
- CPU.Cycles += CPU.MemSpeed;
-
- (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode) ();
-
- DO_HBLANK_CHECK_NoSFX();
- }
-
- ICPU.Registers.PC = CPU.PC - CPU.PCBase;
- S9xPackStatus ();
- IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
- S9xAPUPackStatus ();
- if (CPU.Flags & SCAN_KEYS_FLAG)
- {
- S9xSyncSpeed ();
- CPU.Flags &= ~SCAN_KEYS_FLAG;
- }
+ CPU.Cycles += CPU.MemSpeed;
+
+ (*ICPU.S9xOpcodes [*CPU.PC++].S9xOpcode)();
+
+ DO_HBLANK_CHECK_NoSFX();
+ }
+
+ ICPU.Registers.PC = CPU.PC - CPU.PCBase;
+ S9xPackStatus();
+ IAPU.Registers.PC = IAPU.PC - IAPU.RAM;
+ S9xAPUPackStatus();
+ if (CPU.Flags & SCAN_KEYS_FLAG)
+ {
+ S9xSyncSpeed();
+ CPU.Flags &= ~SCAN_KEYS_FLAG;
+ }
}
-void S9xSetIRQ (uint32 source)
+void S9xSetIRQ(uint32 source)
{
- CPU.IRQActive |= source;
- CPU.Flags |= IRQ_PENDING_FLAG;
- CPU.IRQCycleCount = 3;
- if (CPU.WaitingForInterrupt)
- {
- // Force IRQ to trigger immediately after WAI -
- // Final Fantasy Mystic Quest crashes without this.
- CPU.IRQCycleCount = 0;
- CPU.WaitingForInterrupt = FALSE;
- CPU.PC++;
- }
+ CPU.IRQActive |= source;
+ CPU.Flags |= IRQ_PENDING_FLAG;
+ CPU.IRQCycleCount = 3;
+ if (CPU.WaitingForInterrupt)
+ {
+ // Force IRQ to trigger immediately after WAI -
+ // Final Fantasy Mystic Quest crashes without this.
+ CPU.IRQCycleCount = 0;
+ CPU.WaitingForInterrupt = FALSE;
+ CPU.PC++;
+ }
}
-void S9xClearIRQ (uint32 source)
+void S9xClearIRQ(uint32 source)
{
- CLEAR_IRQ_SOURCE (source);
+ CLEAR_IRQ_SOURCE(source);
}
/*
@@ -464,380 +480,372 @@ void S9xClearIRQ (uint32 source)
* The original version of S9xDoHBlankProcessing is S9xDoHBlankProcessing_SFX
* below. Remember to propagate modifications to the NoSFX version.
*/
-void S9xDoHBlankProcessing_SFX ()
+void S9xDoHBlankProcessing_SFX()
{
#ifdef CPU_SHUTDOWN
- CPU.WaitCounter++;
+ CPU.WaitCounter++;
#endif
- switch (CPU.WhichEvent)
- {
- case HBLANK_START_EVENT:
+ switch (CPU.WhichEvent)
+ {
+ case HBLANK_START_EVENT:
#ifdef ACCUMULATE_JOYPAD
-/*
- * This call allows NDSSFC to synchronise the DS controller more often.
- * If porting a later version of Snes9x into NDSSFC, it is essential to
- * preserve it.
- */
- if ((CPU.V_Counter & 0xF) == 0)
- NDSSFCAccumulateJoypad ();
+ /*
+ * This call allows NDSSFC to synchronise the DS controller more often.
+ * If porting a later version of Snes9x into NDSSFC, it is essential to
+ * preserve it.
+ */
+ if ((CPU.V_Counter & 0xF) == 0)
+ NDSSFCAccumulateJoypad();
#endif
- if (IPPU.HDMA && CPU.V_Counter <= PPU.ScreenHeight)
- IPPU.HDMA = S9xDoHDMA (IPPU.HDMA);
+ if (IPPU.HDMA && CPU.V_Counter <= PPU.ScreenHeight)
+ IPPU.HDMA = S9xDoHDMA(IPPU.HDMA);
- break;
+ break;
- case HBLANK_END_EVENT:
- S9xSuperFXExec ();
+ case HBLANK_END_EVENT:
+ S9xSuperFXExec();
#ifndef STORM
- if (Settings.SoundSync)
- S9xGenerateSound ();
+ if (Settings.SoundSync)
+ S9xGenerateSound();
#endif
- CPU.Cycles -= Settings.H_Max;
- if (IAPU.APUExecuting)
- {
- APU.Cycles -= Settings.H_Max;
+ CPU.Cycles -= Settings.H_Max;
+ if (IAPU.APUExecuting)
+ {
+ APU.Cycles -= Settings.H_Max;
#ifdef MK_APU
- S9xCatchupCount();
+ S9xCatchupCount();
#endif
- }
- else
- APU.Cycles = 0;
-
- CPU.NextEvent = -1;
- ICPU.Scanline++;
-
- if (++CPU.V_Counter >= (Settings.PAL ? SNES_MAX_PAL_VCOUNTER : SNES_MAX_NTSC_VCOUNTER))
- {
- CPU.V_Counter = 0;
- Memory.FillRAM[0x213F]^=0x80;
- PPU.RangeTimeOver = 0;
- CPU.NMIActive = FALSE;
- ICPU.Frame++;
- PPU.HVBeamCounterLatched = 0;
- CPU.Flags |= SCAN_KEYS_FLAG;
- S9xStartHDMA ();
- }
-
- S9xProcessSound (0);
-
- if (PPU.VTimerEnabled && !PPU.HTimerEnabled && CPU.V_Counter == PPU.IRQVBeamPos)
- {
- S9xSetIRQ (PPU_V_BEAM_IRQ_SOURCE);
- }
-
- if (CPU.V_Counter == PPU.ScreenHeight + FIRST_VISIBLE_LINE)
- {
- // Start of V-blank
- S9xEndScreenRefresh ();
- IPPU.HDMA = 0;
- // Bits 7 and 6 of $4212 are computed when read in S9xGetPPU.
- missing.dma_this_frame = 0;
- IPPU.MaxBrightness = PPU.Brightness;
- PPU.ForcedBlanking = (Memory.FillRAM [0x2100] >> 7) & 1;
-
- if(!PPU.ForcedBlanking)
- {
- PPU.OAMAddr = PPU.SavedOAMAddr;
-
- uint8 tmp = 0;
- if(PPU.OAMPriorityRotation)
- tmp = (PPU.OAMAddr&0xFE)>>1;
- if((PPU.OAMFlip&1) || PPU.FirstSprite!=tmp)
- {
- PPU.FirstSprite=tmp;
- IPPU.OBJChanged=TRUE;
- }
-
- PPU.OAMFlip = 0;
- }
-
- Memory.FillRAM[0x4210] = 0x80 |Model->_5A22;
- if (Memory.FillRAM[0x4200] & 0x80)
- {
- CPU.NMIActive = TRUE;
- CPU.Flags |= NMI_FLAG;
- CPU.NMICycleCount = CPU.NMITriggerPoint;
- }
+ }
+ else
+ APU.Cycles = 0;
+
+ CPU.NextEvent = -1;
+ ICPU.Scanline++;
+
+ if (++CPU.V_Counter >= (Settings.PAL ? SNES_MAX_PAL_VCOUNTER :
+ SNES_MAX_NTSC_VCOUNTER))
+ {
+ CPU.V_Counter = 0;
+ Memory.FillRAM[0x213F] ^= 0x80;
+ PPU.RangeTimeOver = 0;
+ CPU.NMIActive = FALSE;
+ ICPU.Frame++;
+ PPU.HVBeamCounterLatched = 0;
+ CPU.Flags |= SCAN_KEYS_FLAG;
+ S9xStartHDMA();
+ }
+
+ S9xProcessSound(0);
+
+ if (PPU.VTimerEnabled && !PPU.HTimerEnabled && CPU.V_Counter == PPU.IRQVBeamPos)
+ S9xSetIRQ(PPU_V_BEAM_IRQ_SOURCE);
+
+ if (CPU.V_Counter == PPU.ScreenHeight + FIRST_VISIBLE_LINE)
+ {
+ // Start of V-blank
+ S9xEndScreenRefresh();
+ IPPU.HDMA = 0;
+ // Bits 7 and 6 of $4212 are computed when read in S9xGetPPU.
+ missing.dma_this_frame = 0;
+ IPPU.MaxBrightness = PPU.Brightness;
+ PPU.ForcedBlanking = (Memory.FillRAM [0x2100] >> 7) & 1;
+
+ if (!PPU.ForcedBlanking)
+ {
+ PPU.OAMAddr = PPU.SavedOAMAddr;
+
+ uint8 tmp = 0;
+ if (PPU.OAMPriorityRotation)
+ tmp = (PPU.OAMAddr & 0xFE) >> 1;
+ if ((PPU.OAMFlip & 1) || PPU.FirstSprite != tmp)
+ {
+ PPU.FirstSprite = tmp;
+ IPPU.OBJChanged = TRUE;
+ }
+
+ PPU.OAMFlip = 0;
+ }
+
+ Memory.FillRAM[0x4210] = 0x80 | Model->_5A22;
+ if (Memory.FillRAM[0x4200] & 0x80)
+ {
+ CPU.NMIActive = TRUE;
+ 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 ();
- S9xAPUPackStatus ();
- Snapshot (NULL);
- }
+ if (CPU.Flags & SAVE_SNAPSHOT_FLAG)
+ {
+ CPU.Flags &= ~SAVE_SNAPSHOT_FLAG;
+ Registers.PC = CPU.PC - CPU.PCBase;
+ S9xPackStatus();
+ S9xAPUPackStatus();
+ Snapshot(NULL);
+ }
+#endif
+ }
+
+ if (CPU.V_Counter == PPU.ScreenHeight + 3)
+ S9xUpdateJoypads();
+
+ if (CPU.V_Counter == FIRST_VISIBLE_LINE)
+ {
+ Memory.FillRAM[0x4210] = Model->_5A22;
+ CPU.Flags &= ~NMI_FLAG;
+ S9xStartScreenRefresh();
+ }
+ if (CPU.V_Counter >= FIRST_VISIBLE_LINE &&
+ CPU.V_Counter < PPU.ScreenHeight + FIRST_VISIBLE_LINE)
+ RenderLine(CPU.V_Counter - FIRST_VISIBLE_LINE);
+ // Use TimerErrorCounter to skip update of SPC700 timers once
+ // every 128 updates. Needed because this section of code is called
+ // once every emulated 63.5 microseconds, which coresponds to
+ // 15.750KHz, but the SPC700 timers need to be updated at multiples
+ // of 8KHz, hence the error correction.
+ // IAPU.TimerErrorCounter++;
+ // if (IAPU.TimerErrorCounter >= )
+ // IAPU.TimerErrorCounter = 0;
+ // else
+ {
+ if (APU.TimerEnabled [2])
+ {
+ APU.Timer [2] += 4;
+ while (APU.Timer [2] >= APU.TimerTarget [2])
+ {
+ IAPU.RAM [0xff] = (IAPU.RAM [0xff] + 1) & 0xf;
+ APU.Timer [2] -= APU.TimerTarget [2];
+#ifdef SPC700_SHUTDOWN
+ IAPU.WaitCounter++;
+ IAPU.APUExecuting = TRUE;
#endif
- }
-
- if (CPU.V_Counter == PPU.ScreenHeight + 3)
- S9xUpdateJoypads ();
-
- if (CPU.V_Counter == FIRST_VISIBLE_LINE)
- {
- Memory.FillRAM[0x4210] = Model->_5A22;
- CPU.Flags &= ~NMI_FLAG;
- S9xStartScreenRefresh ();
- }
- if (CPU.V_Counter >= FIRST_VISIBLE_LINE &&
- CPU.V_Counter < PPU.ScreenHeight + FIRST_VISIBLE_LINE)
- {
- RenderLine (CPU.V_Counter - FIRST_VISIBLE_LINE);
- }
- // Use TimerErrorCounter to skip update of SPC700 timers once
- // every 128 updates. Needed because this section of code is called
- // once every emulated 63.5 microseconds, which coresponds to
- // 15.750KHz, but the SPC700 timers need to be updated at multiples
- // of 8KHz, hence the error correction.
-// IAPU.TimerErrorCounter++;
-// if (IAPU.TimerErrorCounter >= )
-// IAPU.TimerErrorCounter = 0;
-// else
- {
- if (APU.TimerEnabled [2])
- {
- APU.Timer [2] += 4;
- while (APU.Timer [2] >= APU.TimerTarget [2])
- {
- IAPU.RAM [0xff] = (IAPU.RAM [0xff] + 1) & 0xf;
- APU.Timer [2] -= APU.TimerTarget [2];
-#ifdef SPC700_SHUTDOWN
- IAPU.WaitCounter++;
- IAPU.APUExecuting = TRUE;
+ }
+ }
+ if (CPU.V_Counter & 1)
+ {
+ if (APU.TimerEnabled [0])
+ {
+ APU.Timer [0]++;
+ if (APU.Timer [0] >= APU.TimerTarget [0])
+ {
+ IAPU.RAM [0xfd] = (IAPU.RAM [0xfd] + 1) & 0xf;
+ APU.Timer [0] = 0;
+#ifdef SPC700_SHUTDOWN
+ IAPU.WaitCounter++;
+ IAPU.APUExecuting = TRUE;
#endif
- }
- }
- if (CPU.V_Counter & 1)
- {
- if (APU.TimerEnabled [0])
- {
- APU.Timer [0]++;
- if (APU.Timer [0] >= APU.TimerTarget [0])
- {
- IAPU.RAM [0xfd] = (IAPU.RAM [0xfd] + 1) & 0xf;
- APU.Timer [0] = 0;
-#ifdef SPC700_SHUTDOWN
- IAPU.WaitCounter++;
- IAPU.APUExecuting = TRUE;
+ }
+ }
+ if (APU.TimerEnabled [1])
+ {
+ APU.Timer [1]++;
+ if (APU.Timer [1] >= APU.TimerTarget [1])
+ {
+ IAPU.RAM [0xfe] = (IAPU.RAM [0xfe] + 1) & 0xf;
+ APU.Timer [1] = 0;
+#ifdef SPC700_SHUTDOWN
+ IAPU.WaitCounter++;
+ IAPU.APUExecuting = TRUE;
#endif
- }
- }
- if (APU.TimerEnabled [1])
- {
- APU.Timer [1]++;
- if (APU.Timer [1] >= APU.TimerTarget [1])
- {
- IAPU.RAM [0xfe] = (IAPU.RAM [0xfe] + 1) & 0xf;
- APU.Timer [1] = 0;
-#ifdef SPC700_SHUTDOWN
- IAPU.WaitCounter++;
- IAPU.APUExecuting = TRUE;
-#endif
- }
- }
- }
- }
- break;
-
- case HTIMER_BEFORE_EVENT:
- case HTIMER_AFTER_EVENT:
- if (PPU.HTimerEnabled && (!PPU.VTimerEnabled || CPU.V_Counter == PPU.IRQVBeamPos))
- {
- S9xSetIRQ (PPU_H_BEAM_IRQ_SOURCE);
- }
- break;
- }
-
- S9xReschedule ();
+ }
+ }
+ }
+ }
+ break;
+
+ case HTIMER_BEFORE_EVENT:
+ case HTIMER_AFTER_EVENT:
+ if (PPU.HTimerEnabled && (!PPU.VTimerEnabled
+ || CPU.V_Counter == PPU.IRQVBeamPos))
+ S9xSetIRQ(PPU_H_BEAM_IRQ_SOURCE);
+ break;
+ }
+
+ S9xReschedule();
}
-void S9xDoHBlankProcessing_NoSFX ()
+void S9xDoHBlankProcessing_NoSFX()
{
#ifdef CPU_SHUTDOWN
- CPU.WaitCounter++;
+ CPU.WaitCounter++;
#endif
- switch (CPU.WhichEvent)
- {
- case HBLANK_START_EVENT:
+ switch (CPU.WhichEvent)
+ {
+ case HBLANK_START_EVENT:
#ifdef ACCUMULATE_JOYPAD
-/*
- * This call allows NDSSFC to synchronise the DS controller more often.
- * If porting a later version of Snes9x into NDSSFC, it is essential to
- * preserve it.
- */
- NDSSFCAccumulateJoypad ();
+ /*
+ * This call allows NDSSFC to synchronise the DS controller more often.
+ * If porting a later version of Snes9x into NDSSFC, it is essential to
+ * preserve it.
+ */
+ NDSSFCAccumulateJoypad();
#endif
- if (IPPU.HDMA && CPU.V_Counter <= PPU.ScreenHeight)
- IPPU.HDMA = S9xDoHDMA (IPPU.HDMA);
+ if (IPPU.HDMA && CPU.V_Counter <= PPU.ScreenHeight)
+ IPPU.HDMA = S9xDoHDMA(IPPU.HDMA);
- break;
+ break;
- case HBLANK_END_EVENT:
+ case HBLANK_END_EVENT:
#ifndef STORM
- if (Settings.SoundSync)
- S9xGenerateSound ();
+ if (Settings.SoundSync)
+ S9xGenerateSound();
#endif
- CPU.Cycles -= Settings.H_Max;
- if (IAPU.APUExecuting)
- {
- APU.Cycles -= Settings.H_Max;
+ CPU.Cycles -= Settings.H_Max;
+ if (IAPU.APUExecuting)
+ {
+ APU.Cycles -= Settings.H_Max;
#ifdef MK_APU
- S9xCatchupCount();
+ S9xCatchupCount();
#endif
- }
- else
- APU.Cycles = 0;
-
- CPU.NextEvent = -1;
- ICPU.Scanline++;
-
- if (++CPU.V_Counter >= (Settings.PAL ? SNES_MAX_PAL_VCOUNTER : SNES_MAX_NTSC_VCOUNTER))
- {
- CPU.V_Counter = 0;
- Memory.FillRAM[0x213F]^=0x80;
- PPU.RangeTimeOver = 0;
- CPU.NMIActive = FALSE;
- ICPU.Frame++;
- PPU.HVBeamCounterLatched = 0;
- CPU.Flags |= SCAN_KEYS_FLAG;
- S9xStartHDMA ();
- }
-
- S9xProcessSound (0);
-
- if (PPU.VTimerEnabled && !PPU.HTimerEnabled && CPU.V_Counter == PPU.IRQVBeamPos)
- {
- S9xSetIRQ (PPU_V_BEAM_IRQ_SOURCE);
- }
-
- if (CPU.V_Counter == PPU.ScreenHeight + FIRST_VISIBLE_LINE)
- {
- // Start of V-blank
- S9xEndScreenRefresh ();
- IPPU.HDMA = 0;
- // Bits 7 and 6 of $4212 are computed when read in S9xGetPPU.
- missing.dma_this_frame = 0;
- IPPU.MaxBrightness = PPU.Brightness;
- PPU.ForcedBlanking = (Memory.FillRAM [0x2100] >> 7) & 1;
-
- if(!PPU.ForcedBlanking)
- {
- PPU.OAMAddr = PPU.SavedOAMAddr;
-
- uint8 tmp = 0;
- if(PPU.OAMPriorityRotation)
- tmp = (PPU.OAMAddr&0xFE)>>1;
- if((PPU.OAMFlip&1) || PPU.FirstSprite!=tmp)
- {
- PPU.FirstSprite=tmp;
- IPPU.OBJChanged=TRUE;
- }
-
- PPU.OAMFlip = 0;
- }
-
- Memory.FillRAM[0x4210] = 0x80 |Model->_5A22;
- if (Memory.FillRAM[0x4200] & 0x80)
- {
- CPU.NMIActive = TRUE;
- CPU.Flags |= NMI_FLAG;
- CPU.NMICycleCount = CPU.NMITriggerPoint;
- }
+ }
+ else
+ APU.Cycles = 0;
+
+ CPU.NextEvent = -1;
+ ICPU.Scanline++;
+
+ if (++CPU.V_Counter >= (Settings.PAL ? SNES_MAX_PAL_VCOUNTER :
+ SNES_MAX_NTSC_VCOUNTER))
+ {
+ CPU.V_Counter = 0;
+ Memory.FillRAM[0x213F] ^= 0x80;
+ PPU.RangeTimeOver = 0;
+ CPU.NMIActive = FALSE;
+ ICPU.Frame++;
+ PPU.HVBeamCounterLatched = 0;
+ CPU.Flags |= SCAN_KEYS_FLAG;
+ S9xStartHDMA();
+ }
+
+ S9xProcessSound(0);
+
+ if (PPU.VTimerEnabled && !PPU.HTimerEnabled && CPU.V_Counter == PPU.IRQVBeamPos)
+ S9xSetIRQ(PPU_V_BEAM_IRQ_SOURCE);
+
+ if (CPU.V_Counter == PPU.ScreenHeight + FIRST_VISIBLE_LINE)
+ {
+ // Start of V-blank
+ S9xEndScreenRefresh();
+ IPPU.HDMA = 0;
+ // Bits 7 and 6 of $4212 are computed when read in S9xGetPPU.
+ missing.dma_this_frame = 0;
+ IPPU.MaxBrightness = PPU.Brightness;
+ PPU.ForcedBlanking = (Memory.FillRAM [0x2100] >> 7) & 1;
+
+ if (!PPU.ForcedBlanking)
+ {
+ PPU.OAMAddr = PPU.SavedOAMAddr;
+
+ uint8 tmp = 0;
+ if (PPU.OAMPriorityRotation)
+ tmp = (PPU.OAMAddr & 0xFE) >> 1;
+ if ((PPU.OAMFlip & 1) || PPU.FirstSprite != tmp)
+ {
+ PPU.FirstSprite = tmp;
+ IPPU.OBJChanged = TRUE;
+ }
+
+ PPU.OAMFlip = 0;
+ }
+
+ Memory.FillRAM[0x4210] = 0x80 | Model->_5A22;
+ if (Memory.FillRAM[0x4200] & 0x80)
+ {
+ CPU.NMIActive = TRUE;
+ 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 ();
- S9xAPUPackStatus ();
- Snapshot (NULL);
- }
+ if (CPU.Flags & SAVE_SNAPSHOT_FLAG)
+ {
+ CPU.Flags &= ~SAVE_SNAPSHOT_FLAG;
+ Registers.PC = CPU.PC - CPU.PCBase;
+ S9xPackStatus();
+ S9xAPUPackStatus();
+ Snapshot(NULL);
+ }
+#endif
+ }
+
+ if (CPU.V_Counter == PPU.ScreenHeight + 3)
+ S9xUpdateJoypads();
+
+ if (CPU.V_Counter == FIRST_VISIBLE_LINE)
+ {
+ Memory.FillRAM[0x4210] = Model->_5A22;
+ CPU.Flags &= ~NMI_FLAG;
+ S9xStartScreenRefresh();
+ }
+ if (CPU.V_Counter >= FIRST_VISIBLE_LINE &&
+ CPU.V_Counter < PPU.ScreenHeight + FIRST_VISIBLE_LINE)
+ RenderLine(CPU.V_Counter - FIRST_VISIBLE_LINE);
+ // Use TimerErrorCounter to skip update of SPC700 timers once
+ // every 128 updates. Needed because this section of code is called
+ // once every emulated 63.5 microseconds, which coresponds to
+ // 15.750KHz, but the SPC700 timers need to be updated at multiples
+ // of 8KHz, hence the error correction.
+ // IAPU.TimerErrorCounter++;
+ // if (IAPU.TimerErrorCounter >= )
+ // IAPU.TimerErrorCounter = 0;
+ // else
+ {
+ if (APU.TimerEnabled [2])
+ {
+ APU.Timer [2] += 4;
+ while (APU.Timer [2] >= APU.TimerTarget [2])
+ {
+ IAPU.RAM [0xff] = (IAPU.RAM [0xff] + 1) & 0xf;
+ APU.Timer [2] -= APU.TimerTarget [2];
+#ifdef SPC700_SHUTDOWN
+ IAPU.WaitCounter++;
+ IAPU.APUExecuting = TRUE;
#endif
- }
-
- if (CPU.V_Counter == PPU.ScreenHeight + 3)
- S9xUpdateJoypads ();
-
- if (CPU.V_Counter == FIRST_VISIBLE_LINE)
- {
- Memory.FillRAM[0x4210] = Model->_5A22;
- CPU.Flags &= ~NMI_FLAG;
- S9xStartScreenRefresh ();
- }
- if (CPU.V_Counter >= FIRST_VISIBLE_LINE &&
- CPU.V_Counter < PPU.ScreenHeight + FIRST_VISIBLE_LINE)
- {
- RenderLine (CPU.V_Counter - FIRST_VISIBLE_LINE);
- }
- // Use TimerErrorCounter to skip update of SPC700 timers once
- // every 128 updates. Needed because this section of code is called
- // once every emulated 63.5 microseconds, which coresponds to
- // 15.750KHz, but the SPC700 timers need to be updated at multiples
- // of 8KHz, hence the error correction.
-// IAPU.TimerErrorCounter++;
-// if (IAPU.TimerErrorCounter >= )
-// IAPU.TimerErrorCounter = 0;
-// else
- {
- if (APU.TimerEnabled [2])
- {
- APU.Timer [2] += 4;
- while (APU.Timer [2] >= APU.TimerTarget [2])
- {
- IAPU.RAM [0xff] = (IAPU.RAM [0xff] + 1) & 0xf;
- APU.Timer [2] -= APU.TimerTarget [2];
-#ifdef SPC700_SHUTDOWN
- IAPU.WaitCounter++;
- IAPU.APUExecuting = TRUE;
+ }
+ }
+ if (CPU.V_Counter & 1)
+ {
+ if (APU.TimerEnabled [0])
+ {
+ APU.Timer [0]++;
+ if (APU.Timer [0] >= APU.TimerTarget [0])
+ {
+ IAPU.RAM [0xfd] = (IAPU.RAM [0xfd] + 1) & 0xf;
+ APU.Timer [0] = 0;
+#ifdef SPC700_SHUTDOWN
+ IAPU.WaitCounter++;
+ IAPU.APUExecuting = TRUE;
#endif
- }
- }
- if (CPU.V_Counter & 1)
- {
- if (APU.TimerEnabled [0])
- {
- APU.Timer [0]++;
- if (APU.Timer [0] >= APU.TimerTarget [0])
- {
- IAPU.RAM [0xfd] = (IAPU.RAM [0xfd] + 1) & 0xf;
- APU.Timer [0] = 0;
-#ifdef SPC700_SHUTDOWN
- IAPU.WaitCounter++;
- IAPU.APUExecuting = TRUE;
+ }
+ }
+ if (APU.TimerEnabled [1])
+ {
+ APU.Timer [1]++;
+ if (APU.Timer [1] >= APU.TimerTarget [1])
+ {
+ IAPU.RAM [0xfe] = (IAPU.RAM [0xfe] + 1) & 0xf;
+ APU.Timer [1] = 0;
+#ifdef SPC700_SHUTDOWN
+ IAPU.WaitCounter++;
+ IAPU.APUExecuting = TRUE;
#endif
- }
- }
- if (APU.TimerEnabled [1])
- {
- APU.Timer [1]++;
- if (APU.Timer [1] >= APU.TimerTarget [1])
- {
- IAPU.RAM [0xfe] = (IAPU.RAM [0xfe] + 1) & 0xf;
- APU.Timer [1] = 0;
-#ifdef SPC700_SHUTDOWN
- IAPU.WaitCounter++;
- IAPU.APUExecuting = TRUE;
-#endif
- }
- }
- }
- }
- break;
-
- case HTIMER_BEFORE_EVENT:
- case HTIMER_AFTER_EVENT:
- if (PPU.HTimerEnabled && (!PPU.VTimerEnabled || CPU.V_Counter == PPU.IRQVBeamPos))
- {
- S9xSetIRQ (PPU_H_BEAM_IRQ_SOURCE);
- }
- break;
- }
-
- S9xReschedule ();
+ }
+ }
+ }
+ }
+ break;
+
+ case HTIMER_BEFORE_EVENT:
+ case HTIMER_AFTER_EVENT:
+ if (PPU.HTimerEnabled && (!PPU.VTimerEnabled
+ || CPU.V_Counter == PPU.IRQVBeamPos))
+ S9xSetIRQ(PPU_H_BEAM_IRQ_SOURCE);
+ break;
+ }
+
+ S9xReschedule();
}