From 804169dd621a3ad3eec1a32ce30350de667fee80 Mon Sep 17 00:00:00 2001 From: aliaspider Date: Thu, 30 Oct 2014 00:23:30 +0100 Subject: apply a facelift --- source/cpuexec.h | 210 ++++++++++++++++++++++++++----------------------------- 1 file changed, 100 insertions(+), 110 deletions(-) (limited to 'source/cpuexec.h') diff --git a/source/cpuexec.h b/source/cpuexec.h index 346b90e..3eb6064 100644 --- a/source/cpuexec.h +++ b/source/cpuexec.h @@ -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. *******************************************************************************/ @@ -95,44 +95,45 @@ #define DO_HBLANK_CHECK_SFX() \ if (CPU.Cycles >= CPU.NextEvent) \ - S9xDoHBlankProcessing_SFX (); + S9xDoHBlankProcessing_SFX (); #define DO_HBLANK_CHECK_NoSFX() \ if (CPU.Cycles >= CPU.NextEvent) \ - S9xDoHBlankProcessing_NoSFX (); + S9xDoHBlankProcessing_NoSFX (); -typedef struct { +typedef struct +{ #ifdef __WIN32__ - void (__cdecl *S9xOpcode)( void); + void (__cdecl* S9xOpcode)(void); #else - void (*S9xOpcode)( void); + void (*S9xOpcode)(void); #endif -}SOpcodes; +} SOpcodes; typedef struct { - uint8 *Speed; - SOpcodes *S9xOpcodes; - SRegisters Registers; - uint8 _Carry; - uint8 _Zero; - uint8 _Negative; - uint8 _Overflow; - bool8 CPUExecuting; - uint32 ShiftedPB; - uint32 ShiftedDB; - uint32 Frame; - uint32 Scanline; - uint32 FrameAdvanceCount; -}SICPU; - -void S9xMainLoop (void); -void S9xReset (void); -void S9xSoftReset (void); -void S9xDoHBlankProcessing_SFX (); -void S9xDoHBlankProcessing_NoSFX (); -void S9xClearIRQ (uint32); -void S9xSetIRQ (uint32); + uint8* Speed; + SOpcodes* S9xOpcodes; + SRegisters Registers; + uint8 _Carry; + uint8 _Zero; + uint8 _Negative; + uint8 _Overflow; + bool8 CPUExecuting; + uint32 ShiftedPB; + uint32 ShiftedDB; + uint32 Frame; + uint32 Scanline; + uint32 FrameAdvanceCount; +} SICPU; + +void S9xMainLoop(void); +void S9xReset(void); +void S9xSoftReset(void); +void S9xDoHBlankProcessing_SFX(); +void S9xDoHBlankProcessing_NoSFX(); +void S9xClearIRQ(uint32); +void S9xSetIRQ(uint32); extern SOpcodes S9xOpcodesE1 [256]; extern SOpcodes S9xOpcodesM1X1 [256]; @@ -144,86 +145,75 @@ extern SICPU ICPU; STATIC inline void S9xUnpackStatus() { - ICPU._Zero = (ICPU.Registers.PL & Zero) == 0; - ICPU._Negative = (ICPU.Registers.PL & Negative); - ICPU._Carry = (ICPU.Registers.PL & Carry); - ICPU._Overflow = (ICPU.Registers.PL & Overflow) >> 6; + ICPU._Zero = (ICPU.Registers.PL & Zero) == 0; + ICPU._Negative = (ICPU.Registers.PL & Negative); + ICPU._Carry = (ICPU.Registers.PL & Carry); + ICPU._Overflow = (ICPU.Registers.PL & Overflow) >> 6; } STATIC inline void S9xPackStatus() { - ICPU.Registers.PL &= ~(Zero | Negative | Carry | Overflow); - ICPU.Registers.PL |= ICPU._Carry | ((ICPU._Zero == 0) << 1) | - (ICPU._Negative & 0x80) | (ICPU._Overflow << 6); + ICPU.Registers.PL &= ~(Zero | Negative | Carry | Overflow); + ICPU.Registers.PL |= ICPU._Carry | ((ICPU._Zero == 0) << 1) | + (ICPU._Negative & 0x80) | (ICPU._Overflow << 6); } -STATIC inline void CLEAR_IRQ_SOURCE (uint32 M) +STATIC inline void CLEAR_IRQ_SOURCE(uint32 M) { - CPU.IRQActive &= ~M; - if (!CPU.IRQActive) - CPU.Flags &= ~IRQ_PENDING_FLAG; + CPU.IRQActive &= ~M; + if (!CPU.IRQActive) + CPU.Flags &= ~IRQ_PENDING_FLAG; } - -STATIC inline void S9xFixCycles () + +STATIC inline void S9xFixCycles() { - if (CheckEmulation ()) - { - ICPU.S9xOpcodes = S9xOpcodesE1; - } - else - if (CheckMemory ()) - { - if (CheckIndex ()) - { - ICPU.S9xOpcodes = S9xOpcodesM1X1; - } - else - { - ICPU.S9xOpcodes = S9xOpcodesM1X0; - } - } - else - { - if (CheckIndex ()) - { - ICPU.S9xOpcodes = S9xOpcodesM0X1; - } - else - { - ICPU.S9xOpcodes = S9xOpcodesM0X0; - } - } + if (CheckEmulation()) + ICPU.S9xOpcodes = S9xOpcodesE1; + else if (CheckMemory()) + { + if (CheckIndex()) + ICPU.S9xOpcodes = S9xOpcodesM1X1; + else + ICPU.S9xOpcodes = S9xOpcodesM1X0; + } + else + { + if (CheckIndex()) + ICPU.S9xOpcodes = S9xOpcodesM0X1; + else + ICPU.S9xOpcodes = S9xOpcodesM0X0; + } } -STATIC inline void S9xReschedule () +STATIC inline void S9xReschedule() { - uint8 which; - long max; - - if (CPU.WhichEvent == HBLANK_START_EVENT || - CPU.WhichEvent == HTIMER_AFTER_EVENT) - { - which = HBLANK_END_EVENT; - max = Settings.H_Max; - } - else - { - which = HBLANK_START_EVENT; - max = Settings.HBlankStart; - } - - if (PPU.HTimerEnabled && - (long) PPU.HTimerPosition < max && - (long) PPU.HTimerPosition > CPU.NextEvent && - (!PPU.VTimerEnabled || - (PPU.VTimerEnabled && CPU.V_Counter == PPU.IRQVBeamPos))) - { - which = (long) PPU.HTimerPosition < Settings.HBlankStart ? - HTIMER_BEFORE_EVENT : HTIMER_AFTER_EVENT; - max = PPU.HTimerPosition; - } - CPU.NextEvent = max; - CPU.WhichEvent = which; + uint8 which; + long max; + + if (CPU.WhichEvent == HBLANK_START_EVENT || + CPU.WhichEvent == HTIMER_AFTER_EVENT) + { + which = HBLANK_END_EVENT; + max = Settings.H_Max; + } + else + { + which = HBLANK_START_EVENT; + max = Settings.HBlankStart; + } + + if (PPU.HTimerEnabled && + (long) PPU.HTimerPosition < max && + (long) PPU.HTimerPosition > CPU.NextEvent && + (!PPU.VTimerEnabled || + (PPU.VTimerEnabled && CPU.V_Counter == PPU.IRQVBeamPos))) + { + which = (long) PPU.HTimerPosition < Settings.HBlankStart ? + HTIMER_BEFORE_EVENT : HTIMER_AFTER_EVENT; + max = PPU.HTimerPosition; + } + CPU.NextEvent = max; + CPU.WhichEvent = which; } #endif -- cgit v1.2.3