aboutsummaryrefslogtreecommitdiff
path: root/source/cpuops.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/cpuops.cpp')
-rw-r--r--source/cpuops.cpp1687
1 files changed, 686 insertions, 1001 deletions
diff --git a/source/cpuops.cpp b/source/cpuops.cpp
index c5adc67..b01bce5 100644
--- a/source/cpuops.cpp
+++ b/source/cpuops.cpp
@@ -100,204 +100,167 @@
#include "sa1.h"
#include "spc7110.h"
-START_EXTERN_C
-extern uint8 A1, A2, A3, A4, W1, W2, W3, W4;
-extern uint8 Ans8;
-extern uint16 Ans16;
-extern uint32 Ans32;
-extern uint8 Work8;
-extern uint16 Work16;
-extern uint32 Work32;
-extern signed char Int8;
-extern short Int16;
-extern long Int32;
-END_EXTERN_C
-
#include "cpuexec.h"
#include "cpuaddr.h"
#include "cpuops.h"
#include "cpumacro.h"
#include "apu.h"
+// For use with the opcodes whose functions here examine the OpAddress.
+static void OpAddressPassthrough (long Addr)
+{
+ OpAddress = Addr;
+}
+
/* ADC *************************************************************************************** */
static void Op69M1 (void)
{
- Immediate8 (READ);
- ADC8 ();
+ Immediate8 (READ, ADC8);
}
static void Op69M0 (void)
{
- Immediate16 (READ);
- ADC16 ();
+ Immediate16 (READ, ADC16);
}
static void Op65M1 (void)
{
- Direct (READ);
- ADC8 ();
+ Direct (READ, ADC8);
}
static void Op65M0 (void)
{
- Direct (READ);
- ADC16 ();
+ Direct (READ, ADC16);
}
static void Op75M1 (void)
{
- DirectIndexedX (READ);
- ADC8 ();
+ DirectIndexedX (READ, ADC8);
}
static void Op75M0 (void)
{
- DirectIndexedX (READ);
- ADC16 ();
+ DirectIndexedX (READ, ADC16);
}
static void Op72M1 (void)
{
- DirectIndirect (READ);
- ADC8 ();
+ DirectIndirect (READ, ADC8);
}
static void Op72M0 (void)
{
- DirectIndirect (READ);
- ADC16 ();
+ DirectIndirect (READ, ADC16);
}
static void Op61M1 (void)
{
- DirectIndexedIndirect (READ);
- ADC8 ();
+ DirectIndexedIndirect (READ, ADC8);
}
static void Op61M0 (void)
{
- DirectIndexedIndirect (READ);
- ADC16 ();
+ DirectIndexedIndirect (READ, ADC16);
}
static void Op71M1 (void)
{
- DirectIndirectIndexed (READ);
- ADC8 ();
+ DirectIndirectIndexed (READ, ADC8);
}
static void Op71M0 (void)
{
- DirectIndirectIndexed (READ);
- ADC16 ();
+ DirectIndirectIndexed (READ, ADC16);
}
static void Op67M1 (void)
{
- DirectIndirectLong (READ);
- ADC8 ();
+ DirectIndirectLong (READ, ADC8);
}
static void Op67M0 (void)
{
- DirectIndirectLong (READ);
- ADC16 ();
+ DirectIndirectLong (READ, ADC16);
}
static void Op77M1 (void)
{
- DirectIndirectIndexedLong (READ);
- ADC8 ();
+ DirectIndirectIndexedLong (READ, ADC8);
}
static void Op77M0 (void)
{
- DirectIndirectIndexedLong (READ);
- ADC16 ();
+ DirectIndirectIndexedLong (READ, ADC16);
}
static void Op6DM1 (void)
{
- Absolute (READ);
- ADC8 ();
+ Absolute (READ, ADC8);
}
static void Op6DM0 (void)
{
- Absolute (READ);
- ADC16 ();
+ Absolute (READ, ADC16);
}
static void Op7DM1 (void)
{
- AbsoluteIndexedX (READ);
- ADC8 ();
+ AbsoluteIndexedX (READ, ADC8);
}
static void Op7DM0 (void)
{
- AbsoluteIndexedX (READ);
- ADC16 ();
+ AbsoluteIndexedX (READ, ADC16);
}
static void Op79M1 (void)
{
- AbsoluteIndexedY (READ);
- ADC8 ();
+ AbsoluteIndexedY (READ, ADC8);
}
static void Op79M0 (void)
{
- AbsoluteIndexedY (READ);
- ADC16 ();
+ AbsoluteIndexedY (READ, ADC16);
}
static void Op6FM1 (void)
{
- AbsoluteLong (READ);
- ADC8 ();
+ AbsoluteLong (READ, ADC8);
}
static void Op6FM0 (void)
{
- AbsoluteLong (READ);
- ADC16 ();
+ AbsoluteLong (READ, ADC16);
}
static void Op7FM1 (void)
{
- AbsoluteLongIndexedX (READ);
- ADC8 ();
+ AbsoluteLongIndexedX (READ, ADC8);
}
static void Op7FM0 (void)
{
- AbsoluteLongIndexedX (READ);
- ADC16 ();
+ AbsoluteLongIndexedX (READ, ADC16);
}
static void Op63M1 (void)
{
- StackRelative (READ);
- ADC8 ();
+ StackRelative (READ, ADC8);
}
static void Op63M0 (void)
{
- StackRelative (READ);
- ADC16 ();
+ StackRelative (READ, ADC16);
}
static void Op73M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- ADC8 ();
+ StackRelativeIndirectIndexed (READ, ADC8);
}
static void Op73M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- ADC16 ();
+ StackRelativeIndirectIndexed (READ, ADC16);
}
/**********************************************************************************************/
@@ -305,193 +268,165 @@ static void Op73M0 (void)
/* AND *************************************************************************************** */
static void Op29M1 (void)
{
- Registers.AL &= *CPU.PC++;
+ ICPU.Registers.AL &= *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
- SetZN8 (Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
}
static void Op29M0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- Registers.A.W &= *(uint16 *) CPU.PC;
+ ICPU.Registers.A.W &= *(uint16 *) CPU.PC;
#else
- Registers.A.W &= *CPU.PC + (*(CPU.PC + 1) << 8);
+ ICPU.Registers.A.W &= *CPU.PC + (*(CPU.PC + 1) << 8);
#endif
CPU.PC += 2;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
#endif
- SetZN16 (Registers.A.W);
+ SetZN16 (ICPU.Registers.A.W);
}
static void Op25M1 (void)
{
- Direct (READ);
- AND8 ();
+ Direct (READ, AND8);
}
static void Op25M0 (void)
{
- Direct (READ);
- AND16 ();
+ Direct (READ, AND16);
}
static void Op35M1 (void)
{
- DirectIndexedX (READ);
- AND8 ();
+ DirectIndexedX (READ, AND8);
}
static void Op35M0 (void)
{
- DirectIndexedX (READ);
- AND16 ();
+ DirectIndexedX (READ, AND16);
}
static void Op32M1 (void)
{
- DirectIndirect (READ);
- AND8 ();
+ DirectIndirect (READ, AND8);
}
static void Op32M0 (void)
{
- DirectIndirect (READ);
- AND16 ();
+ DirectIndirect (READ, AND16);
}
static void Op21M1 (void)
{
- DirectIndexedIndirect (READ);
- AND8 ();
+ DirectIndexedIndirect (READ, AND8);
}
static void Op21M0 (void)
{
- DirectIndexedIndirect (READ);
- AND16 ();
+ DirectIndexedIndirect (READ, AND16);
}
static void Op31M1 (void)
{
- DirectIndirectIndexed (READ);
- AND8 ();
+ DirectIndirectIndexed (READ, AND8);
}
static void Op31M0 (void)
{
- DirectIndirectIndexed (READ);
- AND16 ();
+ DirectIndirectIndexed (READ, AND16);
}
static void Op27M1 (void)
{
- DirectIndirectLong (READ);
- AND8 ();
+ DirectIndirectLong (READ, AND8);
}
static void Op27M0 (void)
{
- DirectIndirectLong (READ);
- AND16 ();
+ DirectIndirectLong (READ, AND16);
}
static void Op37M1 (void)
{
- DirectIndirectIndexedLong (READ);
- AND8 ();
+ DirectIndirectIndexedLong (READ, AND8);
}
static void Op37M0 (void)
{
- DirectIndirectIndexedLong (READ);
- AND16 ();
+ DirectIndirectIndexedLong (READ, AND16);
}
static void Op2DM1 (void)
{
- Absolute (READ);
- AND8 ();
+ Absolute (READ, AND8);
}
static void Op2DM0 (void)
{
- Absolute (READ);
- AND16 ();
+ Absolute (READ, AND16);
}
static void Op3DM1 (void)
{
- AbsoluteIndexedX (READ);
- AND8 ();
+ AbsoluteIndexedX (READ, AND8);
}
static void Op3DM0 (void)
{
- AbsoluteIndexedX (READ);
- AND16 ();
+ AbsoluteIndexedX (READ, AND16);
}
static void Op39M1 (void)
{
- AbsoluteIndexedY (READ);
- AND8 ();
+ AbsoluteIndexedY (READ, AND8);
}
static void Op39M0 (void)
{
- AbsoluteIndexedY (READ);
- AND16 ();
+ AbsoluteIndexedY (READ, AND16);
}
static void Op2FM1 (void)
{
- AbsoluteLong (READ);
- AND8 ();
+ AbsoluteLong (READ, AND8);
}
static void Op2FM0 (void)
{
- AbsoluteLong (READ);
- AND16 ();
+ AbsoluteLong (READ, AND16);
}
static void Op3FM1 (void)
{
- AbsoluteLongIndexedX (READ);
- AND8 ();
+ AbsoluteLongIndexedX (READ, AND8);
}
static void Op3FM0 (void)
{
- AbsoluteLongIndexedX (READ);
- AND16 ();
+ AbsoluteLongIndexedX (READ, AND16);
}
static void Op23M1 (void)
{
- StackRelative (READ);
- AND8 ();
+ StackRelative (READ, AND8);
}
static void Op23M0 (void)
{
- StackRelative (READ);
- AND16 ();
+ StackRelative (READ, AND16);
}
static void Op33M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- AND8 ();
+ StackRelativeIndirectIndexed (READ, AND8);
}
static void Op33M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- AND16 ();
+ StackRelativeIndirectIndexed (READ, AND16);
}
/**********************************************************************************************/
@@ -508,57 +443,49 @@ static void Op0AM0 (void)
static void Op06M1 (void)
{
- Direct (MODIFY);
- ASL8 ();
+ Direct (MODIFY, ASL8);
}
static void Op06M0 (void)
{
- Direct (MODIFY);
- ASL16 ();
+ Direct (MODIFY, ASL16);
}
static void Op16M1 (void)
{
- DirectIndexedX (MODIFY);
- ASL8 ();
+ DirectIndexedX (MODIFY, ASL8);
}
static void Op16M0 (void)
{
- DirectIndexedX (MODIFY);
- ASL16 ();
+ DirectIndexedX (MODIFY, ASL16);
}
static void Op0EM1 (void)
{
- Absolute (MODIFY);
- ASL8 ();
+ Absolute (MODIFY, ASL8);
}
static void Op0EM0 (void)
{
- Absolute (MODIFY);
- ASL16 ();
+ Absolute (MODIFY, ASL16);
}
static void Op1EM1 (void)
{
- AbsoluteIndexedX (MODIFY);
- ASL8 ();
+ AbsoluteIndexedX (MODIFY, ASL8);
}
static void Op1EM0 (void)
{
- AbsoluteIndexedX (MODIFY);
- ASL16 ();
+ AbsoluteIndexedX (MODIFY, ASL16);
}
/**********************************************************************************************/
/* BIT *************************************************************************************** */
static void Op89M1 (void)
{
- ICPU._Zero = Registers.AL & *CPU.PC++;
+ ICPU._Zero = ICPU.Registers.AL & *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
@@ -567,9 +494,9 @@ static void Op89M1 (void)
static void Op89M0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- ICPU._Zero = (Registers.A.W & *(uint16 *) CPU.PC) != 0;
+ ICPU._Zero = (ICPU.Registers.A.W & *(uint16 *) CPU.PC) != 0;
#else
- ICPU._Zero = (Registers.A.W & (*CPU.PC + (*(CPU.PC + 1) << 8))) != 0;
+ ICPU._Zero = (ICPU.Registers.A.W & (*CPU.PC + (*(CPU.PC + 1) << 8))) != 0;
#endif
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
@@ -579,57 +506,49 @@ static void Op89M0 (void)
static void Op24M1 (void)
{
- Direct (READ);
- BIT8 ();
+ Direct (READ, BIT8);
}
static void Op24M0 (void)
{
- Direct (READ);
- BIT16 ();
+ Direct (READ, BIT16);
}
static void Op34M1 (void)
{
- DirectIndexedX (READ);
- BIT8 ();
+ DirectIndexedX (READ, BIT8);
}
static void Op34M0 (void)
{
- DirectIndexedX (READ);
- BIT16 ();
+ DirectIndexedX (READ, BIT16);
}
static void Op2CM1 (void)
{
- Absolute (READ);
- BIT8 ();
+ Absolute (READ, BIT8);
}
static void Op2CM0 (void)
{
- Absolute (READ);
- BIT16 ();
+ Absolute (READ, BIT16);
}
static void Op3CM1 (void)
{
- AbsoluteIndexedX (READ);
- BIT8 ();
+ AbsoluteIndexedX (READ, BIT8);
}
static void Op3CM0 (void)
{
- AbsoluteIndexedX (READ);
- BIT16 ();
+ AbsoluteIndexedX (READ, BIT16);
}
/**********************************************************************************************/
/* CMP *************************************************************************************** */
static void OpC9M1 (void)
{
- Int32 = (int) Registers.AL - (int) *CPU.PC++;
+ int32 Int32 = (int) ICPU.Registers.AL - (int) *CPU.PC++;
ICPU._Carry = Int32 >= 0;
SetZN8 ((uint8) Int32);
#ifndef SA1_OPCODES
@@ -639,10 +558,11 @@ static void OpC9M1 (void)
static void OpC9M0 (void)
{
+ int32 Int32;
#ifdef FAST_LSB_WORD_ACCESS
- Int32 = (long) Registers.A.W - (long) *(uint16 *) CPU.PC;
+ Int32 = (long) ICPU.Registers.A.W - (long) *(uint16 *) CPU.PC;
#else
- Int32 = (long) Registers.A.W -
+ Int32 = (long) ICPU.Registers.A.W -
(long) (*CPU.PC + (*(CPU.PC + 1) << 8));
#endif
ICPU._Carry = Int32 >= 0;
@@ -655,170 +575,142 @@ static void OpC9M0 (void)
static void OpC5M1 (void)
{
- Direct (READ);
- CMP8 ();
+ Direct (READ, CMP8);
}
static void OpC5M0 (void)
{
- Direct (READ);
- CMP16 ();
+ Direct (READ, CMP16);
}
static void OpD5M1 (void)
{
- DirectIndexedX (READ);
- CMP8 ();
+ DirectIndexedX (READ, CMP8);
}
static void OpD5M0 (void)
{
- DirectIndexedX (READ);
- CMP16 ();
+ DirectIndexedX (READ, CMP16);
}
static void OpD2M1 (void)
{
- DirectIndirect (READ);
- CMP8 ();
+ DirectIndirect (READ, CMP8);
}
static void OpD2M0 (void)
{
- DirectIndirect (READ);
- CMP16 ();
+ DirectIndirect (READ, CMP16);
}
static void OpC1M1 (void)
{
- DirectIndexedIndirect (READ);
- CMP8 ();
+ DirectIndexedIndirect (READ, CMP8);
}
static void OpC1M0 (void)
{
- DirectIndexedIndirect (READ);
- CMP16 ();
+ DirectIndexedIndirect (READ, CMP16);
}
static void OpD1M1 (void)
{
- DirectIndirectIndexed (READ);
- CMP8 ();
+ DirectIndirectIndexed (READ, CMP8);
}
static void OpD1M0 (void)
{
- DirectIndirectIndexed (READ);
- CMP16 ();
+ DirectIndirectIndexed (READ, CMP16);
}
static void OpC7M1 (void)
{
- DirectIndirectLong (READ);
- CMP8 ();
+ DirectIndirectLong (READ, CMP8);
}
static void OpC7M0 (void)
{
- DirectIndirectLong (READ);
- CMP16 ();
+ DirectIndirectLong (READ, CMP16);
}
static void OpD7M1 (void)
{
- DirectIndirectIndexedLong (READ);
- CMP8 ();
+ DirectIndirectIndexedLong (READ, CMP8);
}
static void OpD7M0 (void)
{
- DirectIndirectIndexedLong (READ);
- CMP16 ();
+ DirectIndirectIndexedLong (READ, CMP16);
}
static void OpCDM1 (void)
{
- Absolute (READ);
- CMP8 ();
+ Absolute (READ, CMP8);
}
static void OpCDM0 (void)
{
- Absolute (READ);
- CMP16 ();
+ Absolute (READ, CMP16);
}
static void OpDDM1 (void)
{
- AbsoluteIndexedX (READ);
- CMP8 ();
+ AbsoluteIndexedX (READ, CMP8);
}
static void OpDDM0 (void)
{
- AbsoluteIndexedX (READ);
- CMP16 ();
+ AbsoluteIndexedX (READ, CMP16);
}
static void OpD9M1 (void)
{
- AbsoluteIndexedY (READ);
- CMP8 ();
+ AbsoluteIndexedY (READ, CMP8);
}
static void OpD9M0 (void)
{
- AbsoluteIndexedY (READ);
- CMP16 ();
+ AbsoluteIndexedY (READ, CMP16);
}
static void OpCFM1 (void)
{
- AbsoluteLong (READ);
- CMP8 ();
+ AbsoluteLong (READ, CMP8);
}
static void OpCFM0 (void)
{
- AbsoluteLong (READ);
- CMP16 ();
+ AbsoluteLong (READ, CMP16);
}
static void OpDFM1 (void)
{
- AbsoluteLongIndexedX (READ);
- CMP8 ();
+ AbsoluteLongIndexedX (READ, CMP8);
}
static void OpDFM0 (void)
{
- AbsoluteLongIndexedX (READ);
- CMP16 ();
+ AbsoluteLongIndexedX (READ, CMP16);
}
static void OpC3M1 (void)
{
- StackRelative (READ);
- CMP8 ();
+ StackRelative (READ, CMP8);
}
static void OpC3M0 (void)
{
- StackRelative (READ);
- CMP16 ();
+ StackRelative (READ, CMP16);
}
static void OpD3M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- CMP8 ();
+ StackRelativeIndirectIndexed (READ, CMP8);
}
static void OpD3M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- CMP16 ();
+ StackRelativeIndirectIndexed (READ, CMP16);
}
/**********************************************************************************************/
@@ -826,7 +718,7 @@ static void OpD3M0 (void)
/* CMX *************************************************************************************** */
static void OpE0X1 (void)
{
- Int32 = (int) Registers.XL - (int) *CPU.PC++;
+ int32 Int32 = (int) ICPU.Registers.XL - (int) *CPU.PC++;
ICPU._Carry = Int32 >= 0;
SetZN8 ((uint8) Int32);
#ifndef SA1_OPCODES
@@ -836,10 +728,11 @@ static void OpE0X1 (void)
static void OpE0X0 (void)
{
+ int32 Int32;
#ifdef FAST_LSB_WORD_ACCESS
- Int32 = (long) Registers.X.W - (long) *(uint16 *) CPU.PC;
+ Int32 = (long) ICPU.Registers.X.W - (long) *(uint16 *) CPU.PC;
#else
- Int32 = (long) Registers.X.W -
+ Int32 = (long) ICPU.Registers.X.W -
(long) (*CPU.PC + (*(CPU.PC + 1) << 8));
#endif
ICPU._Carry = Int32 >= 0;
@@ -852,26 +745,22 @@ static void OpE0X0 (void)
static void OpE4X1 (void)
{
- Direct (READ);
- CMX8 ();
+ Direct (READ, CMX8);
}
static void OpE4X0 (void)
{
- Direct (READ);
- CMX16 ();
+ Direct (READ, CMX16);
}
static void OpECX1 (void)
{
- Absolute (READ);
- CMX8 ();
+ Absolute (READ, CMX8);
}
static void OpECX0 (void)
{
- Absolute (READ);
- CMX16 ();
+ Absolute (READ, CMX16);
}
/**********************************************************************************************/
@@ -879,7 +768,7 @@ static void OpECX0 (void)
/* CMY *************************************************************************************** */
static void OpC0X1 (void)
{
- Int32 = (int) Registers.YL - (int) *CPU.PC++;
+ int32 Int32 = (int) ICPU.Registers.YL - (int) *CPU.PC++;
ICPU._Carry = Int32 >= 0;
SetZN8 ((uint8) Int32);
#ifndef SA1_OPCODES
@@ -889,10 +778,11 @@ static void OpC0X1 (void)
static void OpC0X0 (void)
{
+ int32 Int32;
#ifdef FAST_LSB_WORD_ACCESS
- Int32 = (long) Registers.Y.W - (long) *(uint16 *) CPU.PC;
+ Int32 = (long) ICPU.Registers.Y.W - (long) *(uint16 *) CPU.PC;
#else
- Int32 = (long) Registers.Y.W -
+ Int32 = (long) ICPU.Registers.Y.W -
(long) (*CPU.PC + (*(CPU.PC + 1) << 8));
#endif
ICPU._Carry = Int32 >= 0;
@@ -905,26 +795,22 @@ static void OpC0X0 (void)
static void OpC4X1 (void)
{
- Direct (READ);
- CMY8 ();
+ Direct (READ, CMY8);
}
static void OpC4X0 (void)
{
- Direct (READ);
- CMY16 ();
+ Direct (READ, CMY16);
}
static void OpCCX1 (void)
{
- Absolute (READ);
- CMY8 ();
+ Absolute (READ, CMY8);
}
static void OpCCX0 (void)
{
- Absolute (READ);
- CMY16 ();
+ Absolute (READ, CMY16);
}
/**********************************************************************************************/
@@ -942,50 +828,42 @@ static void Op3AM0 (void)
static void OpC6M1 (void)
{
- Direct (MODIFY);
- DEC8 ();
+ Direct (MODIFY, DEC8);
}
static void OpC6M0 (void)
{
- Direct (MODIFY);
- DEC16 ();
+ Direct (MODIFY, DEC16);
}
static void OpD6M1 (void)
{
- DirectIndexedX (MODIFY);
- DEC8 ();
+ DirectIndexedX (MODIFY, DEC8);
}
static void OpD6M0 (void)
{
- DirectIndexedX (MODIFY);
- DEC16 ();
+ DirectIndexedX (MODIFY, DEC16);
}
static void OpCEM1 (void)
{
- Absolute (MODIFY);
- DEC8 ();
+ Absolute (MODIFY, DEC8);
}
static void OpCEM0 (void)
{
- Absolute (MODIFY);
- DEC16 ();
+ Absolute (MODIFY, DEC16);
}
static void OpDEM1 (void)
{
- AbsoluteIndexedX (MODIFY);
- DEC8 ();
+ AbsoluteIndexedX (MODIFY, DEC8);
}
static void OpDEM0 (void)
{
- AbsoluteIndexedX (MODIFY);
- DEC16 ();
+ AbsoluteIndexedX (MODIFY, DEC16);
}
/**********************************************************************************************/
@@ -993,193 +871,165 @@ static void OpDEM0 (void)
/* EOR *************************************************************************************** */
static void Op49M1 (void)
{
- Registers.AL ^= *CPU.PC++;
+ ICPU.Registers.AL ^= *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
- SetZN8 (Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
}
static void Op49M0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- Registers.A.W ^= *(uint16 *) CPU.PC;
+ ICPU.Registers.A.W ^= *(uint16 *) CPU.PC;
#else
- Registers.A.W ^= *CPU.PC + (*(CPU.PC + 1) << 8);
+ ICPU.Registers.A.W ^= *CPU.PC + (*(CPU.PC + 1) << 8);
#endif
CPU.PC += 2;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
#endif
- SetZN16 (Registers.A.W);
+ SetZN16 (ICPU.Registers.A.W);
}
static void Op45M1 (void)
{
- Direct (READ);
- EOR8 ();
+ Direct (READ, EOR8);
}
static void Op45M0 (void)
{
- Direct (READ);
- EOR16 ();
+ Direct (READ, EOR16);
}
static void Op55M1 (void)
{
- DirectIndexedX (READ);
- EOR8 ();
+ DirectIndexedX (READ, EOR8);
}
static void Op55M0 (void)
{
- DirectIndexedX (READ);
- EOR16 ();
+ DirectIndexedX (READ, EOR16);
}
static void Op52M1 (void)
{
- DirectIndirect (READ);
- EOR8 ();
+ DirectIndirect (READ, EOR8);
}
static void Op52M0 (void)
{
- DirectIndirect (READ);
- EOR16 ();
+ DirectIndirect (READ, EOR16);
}
static void Op41M1 (void)
{
- DirectIndexedIndirect (READ);
- EOR8 ();
+ DirectIndexedIndirect (READ, EOR8);
}
static void Op41M0 (void)
{
- DirectIndexedIndirect (READ);
- EOR16 ();
+ DirectIndexedIndirect (READ, EOR16);
}
static void Op51M1 (void)
{
- DirectIndirectIndexed (READ);
- EOR8 ();
+ DirectIndirectIndexed (READ, EOR8);
}
static void Op51M0 (void)
{
- DirectIndirectIndexed (READ);
- EOR16 ();
+ DirectIndirectIndexed (READ, EOR16);
}
static void Op47M1 (void)
{
- DirectIndirectLong (READ);
- EOR8 ();
+ DirectIndirectLong (READ, EOR8);
}
static void Op47M0 (void)
{
- DirectIndirectLong (READ);
- EOR16 ();
+ DirectIndirectLong (READ, EOR16);
}
static void Op57M1 (void)
{
- DirectIndirectIndexedLong (READ);
- EOR8 ();
+ DirectIndirectIndexedLong (READ, EOR8);
}
static void Op57M0 (void)
{
- DirectIndirectIndexedLong (READ);
- EOR16 ();
+ DirectIndirectIndexedLong (READ, EOR16);
}
static void Op4DM1 (void)
{
- Absolute (READ);
- EOR8 ();
+ Absolute (READ, EOR8);
}
static void Op4DM0 (void)
{
- Absolute (READ);
- EOR16 ();
+ Absolute (READ, EOR16);
}
static void Op5DM1 (void)
{
- AbsoluteIndexedX (READ);
- EOR8 ();
+ AbsoluteIndexedX (READ, EOR8);
}
static void Op5DM0 (void)
{
- AbsoluteIndexedX (READ);
- EOR16 ();
+ AbsoluteIndexedX (READ, EOR16);
}
static void Op59M1 (void)
{
- AbsoluteIndexedY (READ);
- EOR8 ();
+ AbsoluteIndexedY (READ, EOR8);
}
static void Op59M0 (void)
{
- AbsoluteIndexedY (READ);
- EOR16 ();
+ AbsoluteIndexedY (READ, EOR16);
}
static void Op4FM1 (void)
{
- AbsoluteLong (READ);
- EOR8 ();
+ AbsoluteLong (READ, EOR8);
}
static void Op4FM0 (void)
{
- AbsoluteLong (READ);
- EOR16 ();
+ AbsoluteLong (READ, EOR16);
}
static void Op5FM1 (void)
{
- AbsoluteLongIndexedX (READ);
- EOR8 ();
+ AbsoluteLongIndexedX (READ, EOR8);
}
static void Op5FM0 (void)
{
- AbsoluteLongIndexedX (READ);
- EOR16 ();
+ AbsoluteLongIndexedX (READ, EOR16);
}
static void Op43M1 (void)
{
- StackRelative (READ);
- EOR8 ();
+ StackRelative (READ, EOR8);
}
static void Op43M0 (void)
{
- StackRelative (READ);
- EOR16 ();
+ StackRelative (READ, EOR16);
}
static void Op53M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- EOR8 ();
+ StackRelativeIndirectIndexed (READ, EOR8);
}
static void Op53M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- EOR16 ();
+ StackRelativeIndirectIndexed (READ, EOR16);
}
/**********************************************************************************************/
@@ -1197,244 +1047,208 @@ static void Op1AM0 (void)
static void OpE6M1 (void)
{
- Direct (MODIFY);
- INC8 ();
+ Direct (MODIFY, INC8);
}
static void OpE6M0 (void)
{
- Direct (MODIFY);
- INC16 ();
+ Direct (MODIFY, INC16);
}
static void OpF6M1 (void)
{
- DirectIndexedX (MODIFY);
- INC8 ();
+ DirectIndexedX (MODIFY, INC8);
}
static void OpF6M0 (void)
{
- DirectIndexedX (MODIFY);
- INC16 ();
+ DirectIndexedX (MODIFY, INC16);
}
static void OpEEM1 (void)
{
- Absolute (MODIFY);
- INC8 ();
+ Absolute (MODIFY, INC8);
}
static void OpEEM0 (void)
{
- Absolute (MODIFY);
- INC16 ();
+ Absolute (MODIFY, INC16);
}
static void OpFEM1 (void)
{
- AbsoluteIndexedX (MODIFY);
- INC8 ();
+ AbsoluteIndexedX (MODIFY, INC8);
}
static void OpFEM0 (void)
{
- AbsoluteIndexedX (MODIFY);
- INC16 ();
+ AbsoluteIndexedX (MODIFY, INC16);
}
/**********************************************************************************************/
/* LDA *************************************************************************************** */
static void OpA9M1 (void)
{
- Registers.AL = *CPU.PC++;
+ ICPU.Registers.AL = *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
- SetZN8 (Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
}
static void OpA9M0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- Registers.A.W = *(uint16 *) CPU.PC;
+ ICPU.Registers.A.W = *(uint16 *) CPU.PC;
#else
- Registers.A.W = *CPU.PC + (*(CPU.PC + 1) << 8);
+ ICPU.Registers.A.W = *CPU.PC + (*(CPU.PC + 1) << 8);
#endif
CPU.PC += 2;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
#endif
- SetZN16 (Registers.A.W);
+ SetZN16 (ICPU.Registers.A.W);
}
static void OpA5M1 (void)
{
- Direct (READ);
- LDA8 ();
+ Direct (READ, LDA8);
}
static void OpA5M0 (void)
{
- Direct (READ);
- LDA16 ();
+ Direct (READ, LDA16);
}
static void OpB5M1 (void)
{
- DirectIndexedX (READ);
- LDA8 ();
+ DirectIndexedX (READ, LDA8);
}
static void OpB5M0 (void)
{
- DirectIndexedX (READ);
- LDA16 ();
+ DirectIndexedX (READ, LDA16);
}
static void OpB2M1 (void)
{
- DirectIndirect (READ);
- LDA8 ();
+ DirectIndirect (READ, LDA8);
}
static void OpB2M0 (void)
{
- DirectIndirect (READ);
- LDA16 ();
+ DirectIndirect (READ, LDA16);
}
static void OpA1M1 (void)
{
- DirectIndexedIndirect (READ);
- LDA8 ();
+ DirectIndexedIndirect (READ, LDA8);
}
static void OpA1M0 (void)
{
- DirectIndexedIndirect (READ);
- LDA16 ();
+ DirectIndexedIndirect (READ, LDA16);
}
static void OpB1M1 (void)
{
- DirectIndirectIndexed (READ);
- LDA8 ();
+ DirectIndirectIndexed (READ, LDA8);
}
static void OpB1M0 (void)
{
- DirectIndirectIndexed (READ);
- LDA16 ();
+ DirectIndirectIndexed (READ, LDA16);
}
static void OpA7M1 (void)
{
- DirectIndirectLong (READ);
- LDA8 ();
+ DirectIndirectLong (READ, LDA8);
}
static void OpA7M0 (void)
{
- DirectIndirectLong (READ);
- LDA16 ();
+ DirectIndirectLong (READ, LDA16);
}
static void OpB7M1 (void)
{
- DirectIndirectIndexedLong (READ);
- LDA8 ();
+ DirectIndirectIndexedLong (READ, LDA8);
}
static void OpB7M0 (void)
{
- DirectIndirectIndexedLong (READ);
- LDA16 ();
+ DirectIndirectIndexedLong (READ, LDA16);
}
static void OpADM1 (void)
{
- Absolute (READ);
- LDA8 ();
+ Absolute (READ, LDA8);
}
static void OpADM0 (void)
{
- Absolute (READ);
- LDA16 ();
+ Absolute (READ, LDA16);
}
static void OpBDM1 (void)
{
- AbsoluteIndexedX (READ);
- LDA8 ();
+ AbsoluteIndexedX (READ, LDA8);
}
static void OpBDM0 (void)
{
- AbsoluteIndexedX (READ);
- LDA16 ();
+ AbsoluteIndexedX (READ, LDA16);
}
static void OpB9M1 (void)
{
- AbsoluteIndexedY (READ);
- LDA8 ();
+ AbsoluteIndexedY (READ, LDA8);
}
static void OpB9M0 (void)
{
- AbsoluteIndexedY (READ);
- LDA16 ();
+ AbsoluteIndexedY (READ, LDA16);
}
static void OpAFM1 (void)
{
- AbsoluteLong (READ);
- LDA8 ();
+ AbsoluteLong (READ, LDA8);
}
static void OpAFM0 (void)
{
- AbsoluteLong (READ);
- LDA16 ();
+ AbsoluteLong (READ, LDA16);
}
static void OpBFM1 (void)
{
- AbsoluteLongIndexedX (READ);
- LDA8 ();
+ AbsoluteLongIndexedX (READ, LDA8);
}
static void OpBFM0 (void)
{
- AbsoluteLongIndexedX (READ);
- LDA16 ();
+ AbsoluteLongIndexedX (READ, LDA16);
}
static void OpA3M1 (void)
{
- StackRelative (READ);
- LDA8 ();
+ StackRelative (READ, LDA8);
}
static void OpA3M0 (void)
{
- StackRelative (READ);
- LDA16 ();
+ StackRelative (READ, LDA16);
}
static void OpB3M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- LDA8 ();
+ StackRelativeIndirectIndexed (READ, LDA8);
}
static void OpB3M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- LDA16 ();
+ StackRelativeIndirectIndexed (READ, LDA16);
}
/**********************************************************************************************/
@@ -1442,147 +1256,131 @@ static void OpB3M0 (void)
/* LDX *************************************************************************************** */
static void OpA2X1 (void)
{
- Registers.XL = *CPU.PC++;
+ ICPU.Registers.XL = *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
- SetZN8 (Registers.XL);
+ SetZN8 (ICPU.Registers.XL);
}
static void OpA2X0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- Registers.X.W = *(uint16 *) CPU.PC;
+ ICPU.Registers.X.W = *(uint16 *) CPU.PC;
#else
- Registers.X.W = *CPU.PC + (*(CPU.PC + 1) << 8);
+ ICPU.Registers.X.W = *CPU.PC + (*(CPU.PC + 1) << 8);
#endif
CPU.PC += 2;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
#endif
- SetZN16 (Registers.X.W);
+ SetZN16 (ICPU.Registers.X.W);
}
static void OpA6X1 (void)
{
- Direct (READ);
- LDX8 ();
+ Direct (READ, LDX8);
}
static void OpA6X0 (void)
{
- Direct (READ);
- LDX16 ();
+ Direct (READ, LDX16);
}
static void OpB6X1 (void)
{
- DirectIndexedY (READ);
- LDX8 ();
+ DirectIndexedY (READ, LDX8);
}
static void OpB6X0 (void)
{
- DirectIndexedY (READ);
- LDX16 ();
+ DirectIndexedY (READ, LDX16);
}
static void OpAEX1 (void)
{
- Absolute (READ);
- LDX8 ();
+ Absolute (READ, LDX8);
}
static void OpAEX0 (void)
{
- Absolute (READ);
- LDX16 ();
+ Absolute (READ, LDX16);
}
static void OpBEX1 (void)
{
- AbsoluteIndexedY (READ);
- LDX8 ();
+ AbsoluteIndexedY (READ, LDX8);
}
static void OpBEX0 (void)
{
- AbsoluteIndexedY (READ);
- LDX16 ();
+ AbsoluteIndexedY (READ, LDX16);
}
/**********************************************************************************************/
/* LDY *************************************************************************************** */
static void OpA0X1 (void)
{
- Registers.YL = *CPU.PC++;
+ ICPU.Registers.YL = *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
- SetZN8 (Registers.YL);
+ SetZN8 (ICPU.Registers.YL);
}
static void OpA0X0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- Registers.Y.W = *(uint16 *) CPU.PC;
+ ICPU.Registers.Y.W = *(uint16 *) CPU.PC;
#else
- Registers.Y.W = *CPU.PC + (*(CPU.PC + 1) << 8);
+ ICPU.Registers.Y.W = *CPU.PC + (*(CPU.PC + 1) << 8);
#endif
CPU.PC += 2;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
#endif
- SetZN16 (Registers.Y.W);
+ SetZN16 (ICPU.Registers.Y.W);
}
static void OpA4X1 (void)
{
- Direct (READ);
- LDY8 ();
+ Direct (READ, LDY8);
}
static void OpA4X0 (void)
{
- Direct (READ);
- LDY16 ();
+ Direct (READ, LDY16);
}
static void OpB4X1 (void)
{
- DirectIndexedX (READ);
- LDY8 ();
+ DirectIndexedX (READ, LDY8);
}
static void OpB4X0 (void)
{
- DirectIndexedX (READ);
- LDY16 ();
+ DirectIndexedX (READ, LDY16);
}
static void OpACX1 (void)
{
- Absolute (READ);
- LDY8 ();
+ Absolute (READ, LDY8);
}
static void OpACX0 (void)
{
- Absolute (READ);
- LDY16 ();
+ Absolute (READ, LDY16);
}
static void OpBCX1 (void)
{
- AbsoluteIndexedX (READ);
- LDY8 ();
+ AbsoluteIndexedX (READ, LDY8);
}
static void OpBCX0 (void)
{
- AbsoluteIndexedX (READ);
- LDY16 ();
+ AbsoluteIndexedX (READ, LDY16);
}
/**********************************************************************************************/
@@ -1599,50 +1397,42 @@ static void Op4AM0 (void)
static void Op46M1 (void)
{
- Direct (MODIFY);
- LSR8 ();
+ Direct (MODIFY, LSR8);
}
static void Op46M0 (void)
{
- Direct (MODIFY);
- LSR16 ();
+ Direct (MODIFY, LSR16);
}
static void Op56M1 (void)
{
- DirectIndexedX (MODIFY);
- LSR8 ();
+ DirectIndexedX (MODIFY, LSR8);
}
static void Op56M0 (void)
{
- DirectIndexedX (MODIFY);
- LSR16 ();
+ DirectIndexedX (MODIFY, LSR16);
}
static void Op4EM1 (void)
{
- Absolute (MODIFY);
- LSR8 ();
+ Absolute (MODIFY, LSR8);
}
static void Op4EM0 (void)
{
- Absolute (MODIFY);
- LSR16 ();
+ Absolute (MODIFY, LSR16);
}
static void Op5EM1 (void)
{
- AbsoluteIndexedX (MODIFY);
- LSR8 ();
+ AbsoluteIndexedX (MODIFY, LSR8);
}
static void Op5EM0 (void)
{
- AbsoluteIndexedX (MODIFY);
- LSR16 ();
+ AbsoluteIndexedX (MODIFY, LSR16);
}
/**********************************************************************************************/
@@ -1650,193 +1440,165 @@ static void Op5EM0 (void)
/* ORA *************************************************************************************** */
static void Op09M1 (void)
{
- Registers.AL |= *CPU.PC++;
+ ICPU.Registers.AL |= *CPU.PC++;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeed;
#endif
- SetZN8 (Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
}
static void Op09M0 (void)
{
#ifdef FAST_LSB_WORD_ACCESS
- Registers.A.W |= *(uint16 *) CPU.PC;
+ ICPU.Registers.A.W |= *(uint16 *) CPU.PC;
#else
- Registers.A.W |= *CPU.PC + (*(CPU.PC + 1) << 8);
+ ICPU.Registers.A.W |= *CPU.PC + (*(CPU.PC + 1) << 8);
#endif
CPU.PC += 2;
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2;
#endif
- SetZN16 (Registers.A.W);
+ SetZN16 (ICPU.Registers.A.W);
}
static void Op05M1 (void)
{
- Direct (READ);
- ORA8 ();
+ Direct (READ, ORA8);
}
static void Op05M0 (void)
{
- Direct (READ);
- ORA16 ();
+ Direct (READ, ORA16);
}
static void Op15M1 (void)
{
- DirectIndexedX (READ);
- ORA8 ();
+ DirectIndexedX (READ, ORA8);
}
static void Op15M0 (void)
{
- DirectIndexedX (READ);
- ORA16 ();
+ DirectIndexedX (READ, ORA16);
}
static void Op12M1 (void)
{
- DirectIndirect (READ);
- ORA8 ();
+ DirectIndirect (READ, ORA8);
}
static void Op12M0 (void)
{
- DirectIndirect (READ);
- ORA16 ();
+ DirectIndirect (READ, ORA16);
}
static void Op01M1 (void)
{
- DirectIndexedIndirect (READ);
- ORA8 ();
+ DirectIndexedIndirect (READ, ORA8);
}
static void Op01M0 (void)
{
- DirectIndexedIndirect (READ);
- ORA16 ();
+ DirectIndexedIndirect (READ, ORA16);
}
static void Op11M1 (void)
{
- DirectIndirectIndexed (READ);
- ORA8 ();
+ DirectIndirectIndexed (READ, ORA8);
}
static void Op11M0 (void)
{
- DirectIndirectIndexed (READ);
- ORA16 ();
+ DirectIndirectIndexed (READ, ORA16);
}
static void Op07M1 (void)
{
- DirectIndirectLong (READ);
- ORA8 ();
+ DirectIndirectLong (READ, ORA8);
}
static void Op07M0 (void)
{
- DirectIndirectLong (READ);
- ORA16 ();
+ DirectIndirectLong (READ, ORA16);
}
static void Op17M1 (void)
{
- DirectIndirectIndexedLong (READ);
- ORA8 ();
+ DirectIndirectIndexedLong (READ, ORA8);
}
static void Op17M0 (void)
{
- DirectIndirectIndexedLong (READ);
- ORA16 ();
+ DirectIndirectIndexedLong (READ, ORA16);
}
static void Op0DM1 (void)
{
- Absolute (READ);
- ORA8 ();
+ Absolute (READ, ORA8);
}
static void Op0DM0 (void)
{
- Absolute (READ);
- ORA16 ();
+ Absolute (READ, ORA16);
}
static void Op1DM1 (void)
{
- AbsoluteIndexedX (READ);
- ORA8 ();
+ AbsoluteIndexedX (READ, ORA8);
}
static void Op1DM0 (void)
{
- AbsoluteIndexedX (READ);
- ORA16 ();
+ AbsoluteIndexedX (READ, ORA16);
}
static void Op19M1 (void)
{
- AbsoluteIndexedY (READ);
- ORA8 ();
+ AbsoluteIndexedY (READ, ORA8);
}
static void Op19M0 (void)
{
- AbsoluteIndexedY (READ);
- ORA16 ();
+ AbsoluteIndexedY (READ, ORA16);
}
static void Op0FM1 (void)
{
- AbsoluteLong (READ);
- ORA8 ();
+ AbsoluteLong (READ, ORA8);
}
static void Op0FM0 (void)
{
- AbsoluteLong (READ);
- ORA16 ();
+ AbsoluteLong (READ, ORA16);
}
static void Op1FM1 (void)
{
- AbsoluteLongIndexedX (READ);
- ORA8 ();
+ AbsoluteLongIndexedX (READ, ORA8);
}
static void Op1FM0 (void)
{
- AbsoluteLongIndexedX (READ);
- ORA16 ();
+ AbsoluteLongIndexedX (READ, ORA16);
}
static void Op03M1 (void)
{
- StackRelative (READ);
- ORA8 ();
+ StackRelative (READ, ORA8);
}
static void Op03M0 (void)
{
- StackRelative (READ);
- ORA16 ();
+ StackRelative (READ, ORA16);
}
static void Op13M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- ORA8 ();
+ StackRelativeIndirectIndexed (READ, ORA8);
}
static void Op13M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- ORA16 ();
+ StackRelativeIndirectIndexed (READ, ORA16);
}
/**********************************************************************************************/
@@ -1854,50 +1616,42 @@ static void Op2AM0 (void)
static void Op26M1 (void)
{
- Direct (MODIFY);
- ROL8 ();
+ Direct (MODIFY, ROL8);
}
static void Op26M0 (void)
{
- Direct (MODIFY);
- ROL16 ();
+ Direct (MODIFY, ROL16);
}
static void Op36M1 (void)
{
- DirectIndexedX (MODIFY);
- ROL8 ();
+ DirectIndexedX (MODIFY, ROL8);
}
static void Op36M0 (void)
{
- DirectIndexedX (MODIFY);
- ROL16 ();
+ DirectIndexedX (MODIFY, ROL16);
}
static void Op2EM1 (void)
{
- Absolute (MODIFY);
- ROL8 ();
+ Absolute (MODIFY, ROL8);
}
static void Op2EM0 (void)
{
- Absolute (MODIFY);
- ROL16 ();
+ Absolute (MODIFY, ROL16);
}
static void Op3EM1 (void)
{
- AbsoluteIndexedX (MODIFY);
- ROL8 ();
+ AbsoluteIndexedX (MODIFY, ROL8);
}
static void Op3EM0 (void)
{
- AbsoluteIndexedX (MODIFY);
- ROL16 ();
+ AbsoluteIndexedX (MODIFY, ROL16);
}
/**********************************************************************************************/
@@ -1914,276 +1668,231 @@ static void Op6AM0 (void)
static void Op66M1 (void)
{
- Direct (MODIFY);
- ROR8 ();
+ Direct (MODIFY, ROR8);
}
static void Op66M0 (void)
{
- Direct (MODIFY);
- ROR16 ();
+ Direct (MODIFY, ROR16);
}
static void Op76M1 (void)
{
- DirectIndexedX (MODIFY);
- ROR8 ();
+ DirectIndexedX (MODIFY, ROR8);
}
static void Op76M0 (void)
{
- DirectIndexedX (MODIFY);
- ROR16 ();
+ DirectIndexedX (MODIFY, ROR16);
}
static void Op6EM1 (void)
{
- Absolute (MODIFY);
- ROR8 ();
+ Absolute (MODIFY, ROR8);
}
static void Op6EM0 (void)
{
- Absolute (MODIFY);
- ROR16 ();
+ Absolute (MODIFY, ROR16);
}
static void Op7EM1 (void)
{
- AbsoluteIndexedX (MODIFY);
- ROR8 ();
+ AbsoluteIndexedX (MODIFY, ROR8);
}
static void Op7EM0 (void)
{
- AbsoluteIndexedX (MODIFY);
- ROR16 ();
+ AbsoluteIndexedX (MODIFY, ROR16);
}
/**********************************************************************************************/
/* SBC *************************************************************************************** */
static void OpE9M1 (void)
{
- Immediate8 (READ);
- SBC8 ();
+ Immediate8 (READ, SBC8);
}
static void OpE9M0 (void)
{
- Immediate16 (READ);
- SBC16 ();
+ Immediate16 (READ, SBC16);
}
static void OpE5M1 (void)
{
- Direct (READ);
- SBC8 ();
+ Direct (READ, SBC8);
}
static void OpE5M0 (void)
{
- Direct (READ);
- SBC16 ();
+ Direct (READ, SBC16);
}
static void OpF5M1 (void)
{
- DirectIndexedX (READ);
- SBC8 ();
+ DirectIndexedX (READ, SBC8);
}
static void OpF5M0 (void)
{
- DirectIndexedX (READ);
- SBC16 ();
+ DirectIndexedX (READ, SBC16);
}
static void OpF2M1 (void)
{
- DirectIndirect (READ);
- SBC8 ();
+ DirectIndirect (READ, SBC8);
}
static void OpF2M0 (void)
{
- DirectIndirect (READ);
- SBC16 ();
+ DirectIndirect (READ, SBC16);
}
static void OpE1M1 (void)
{
- DirectIndexedIndirect (READ);
- SBC8 ();
+ DirectIndexedIndirect (READ, SBC8);
}
static void OpE1M0 (void)
{
- DirectIndexedIndirect (READ);
- SBC16 ();
+ DirectIndexedIndirect (READ, SBC16);
}
static void OpF1M1 (void)
{
- DirectIndirectIndexed (READ);
- SBC8 ();
+ DirectIndirectIndexed (READ, SBC8);
}
static void OpF1M0 (void)
{
- DirectIndirectIndexed (READ);
- SBC16 ();
+ DirectIndirectIndexed (READ, SBC16);
}
static void OpE7M1 (void)
{
- DirectIndirectLong (READ);
- SBC8 ();
+ DirectIndirectLong (READ, SBC8);
}
static void OpE7M0 (void)
{
- DirectIndirectLong (READ);
- SBC16 ();
+ DirectIndirectLong (READ, SBC16);
}
static void OpF7M1 (void)
{
- DirectIndirectIndexedLong (READ);
- SBC8 ();
+ DirectIndirectIndexedLong (READ, SBC8);
}
static void OpF7M0 (void)
{
- DirectIndirectIndexedLong (READ);
- SBC16 ();
+ DirectIndirectIndexedLong (READ, SBC16);
}
static void OpEDM1 (void)
{
- Absolute (READ);
- SBC8 ();
+ Absolute (READ, SBC8);
}
static void OpEDM0 (void)
{
- Absolute (READ);
- SBC16 ();
+ Absolute (READ, SBC16);
}
static void OpFDM1 (void)
{
- AbsoluteIndexedX (READ);
- SBC8 ();
+ AbsoluteIndexedX (READ, SBC8);
}
static void OpFDM0 (void)
{
- AbsoluteIndexedX (READ);
- SBC16 ();
+ AbsoluteIndexedX (READ, SBC16);
}
static void OpF9M1 (void)
{
- AbsoluteIndexedY (READ);
- SBC8 ();
+ AbsoluteIndexedY (READ, SBC8);
}
static void OpF9M0 (void)
{
- AbsoluteIndexedY (READ);
- SBC16 ();
+ AbsoluteIndexedY (READ, SBC16);
}
static void OpEFM1 (void)
{
- AbsoluteLong (READ);
- SBC8 ();
+ AbsoluteLong (READ, SBC8);
}
static void OpEFM0 (void)
{
- AbsoluteLong (READ);
- SBC16 ();
+ AbsoluteLong (READ, SBC16);
}
static void OpFFM1 (void)
{
- AbsoluteLongIndexedX (READ);
- SBC8 ();
+ AbsoluteLongIndexedX (READ, SBC8);
}
static void OpFFM0 (void)
{
- AbsoluteLongIndexedX (READ);
- SBC16 ();
+ AbsoluteLongIndexedX (READ, SBC16);
}
static void OpE3M1 (void)
{
- StackRelative (READ);
- SBC8 ();
+ StackRelative (READ, SBC8);
}
static void OpE3M0 (void)
{
- StackRelative (READ);
- SBC16 ();
+ StackRelative (READ, SBC16);
}
static void OpF3M1 (void)
{
- StackRelativeIndirectIndexed (READ);
- SBC8 ();
+ StackRelativeIndirectIndexed (READ, SBC8);
}
static void OpF3M0 (void)
{
- StackRelativeIndirectIndexed (READ);
- SBC16 ();
+ StackRelativeIndirectIndexed (READ, SBC16);
}
/**********************************************************************************************/
/* STA *************************************************************************************** */
static void Op85M1 (void)
{
- Direct (WRITE);
- STA8 ();
+ Direct (WRITE, STA8);
}
static void Op85M0 (void)
{
- Direct (WRITE);
- STA16 ();
+ Direct (WRITE, STA16);
}
static void Op95M1 (void)
{
- DirectIndexedX (WRITE);
- STA8 ();
+ DirectIndexedX (WRITE, STA8);
}
static void Op95M0 (void)
{
- DirectIndexedX (WRITE);
- STA16 ();
+ DirectIndexedX (WRITE, STA16);
}
static void Op92M1 (void)
{
- DirectIndirect (WRITE);
- STA8 ();
+ DirectIndirect (WRITE, STA8);
}
static void Op92M0 (void)
{
- DirectIndirect (WRITE);
- STA16 ();
+ DirectIndirect (WRITE, STA16);
}
static void Op81M1 (void)
{
- DirectIndexedIndirect (WRITE);
- STA8 ();
+ DirectIndexedIndirect (WRITE, STA8);
#ifdef noVAR_CYCLES
if (CheckIndex ())
CPU.Cycles += ONE_CYCLE;
@@ -2192,8 +1901,7 @@ static void Op81M1 (void)
static void Op81M0 (void)
{
- DirectIndexedIndirect (WRITE);
- STA16 ();
+ DirectIndexedIndirect (WRITE, STA16);
#ifdef noVAR_CYCLES
if (CheckIndex ())
CPU.Cycles += ONE_CYCLE;
@@ -2202,248 +1910,208 @@ static void Op81M0 (void)
static void Op91M1 (void)
{
- DirectIndirectIndexed (WRITE);
- STA8 ();
+ DirectIndirectIndexed (WRITE, STA8);
}
static void Op91M0 (void)
{
- DirectIndirectIndexed (WRITE);
- STA16 ();
+ DirectIndirectIndexed (WRITE, STA16);
}
static void Op87M1 (void)
{
- DirectIndirectLong (WRITE);
- STA8 ();
+ DirectIndirectLong (WRITE, STA8);
}
static void Op87M0 (void)
{
- DirectIndirectLong (WRITE);
- STA16 ();
+ DirectIndirectLong (WRITE, STA16);
}
static void Op97M1 (void)
{
- DirectIndirectIndexedLong (WRITE);
- STA8 ();
+ DirectIndirectIndexedLong (WRITE, STA8);
}
static void Op97M0 (void)
{
- DirectIndirectIndexedLong (WRITE);
- STA16 ();
+ DirectIndirectIndexedLong (WRITE, STA16);
}
static void Op8DM1 (void)
{
- Absolute (WRITE);
- STA8 ();
+ Absolute (WRITE, STA8);
}
static void Op8DM0 (void)
{
- Absolute (WRITE);
- STA16 ();
+ Absolute (WRITE, STA16);
}
static void Op9DM1 (void)
{
- AbsoluteIndexedX (WRITE);
- STA8 ();
+ AbsoluteIndexedX (WRITE, STA8);
}
static void Op9DM0 (void)
{
- AbsoluteIndexedX (WRITE);
- STA16 ();
+ AbsoluteIndexedX (WRITE, STA16);
}
static void Op99M1 (void)
{
- AbsoluteIndexedY (WRITE);
- STA8 ();
+ AbsoluteIndexedY (WRITE, STA8);
}
static void Op99M0 (void)
{
- AbsoluteIndexedY (WRITE);
- STA16 ();
+ AbsoluteIndexedY (WRITE, STA16);
}
static void Op8FM1 (void)
{
- AbsoluteLong (WRITE);
- STA8 ();
+ AbsoluteLong (WRITE, STA8);
}
static void Op8FM0 (void)
{
- AbsoluteLong (WRITE);
- STA16 ();
+ AbsoluteLong (WRITE, STA16);
}
static void Op9FM1 (void)
{
- AbsoluteLongIndexedX (WRITE);
- STA8 ();
+ AbsoluteLongIndexedX (WRITE, STA8);
}
static void Op9FM0 (void)
{
- AbsoluteLongIndexedX (WRITE);
- STA16 ();
+ AbsoluteLongIndexedX (WRITE, STA16);
}
static void Op83M1 (void)
{
- StackRelative (WRITE);
- STA8 ();
+ StackRelative (WRITE, STA8);
}
static void Op83M0 (void)
{
- StackRelative (WRITE);
- STA16 ();
+ StackRelative (WRITE, STA16);
}
static void Op93M1 (void)
{
- StackRelativeIndirectIndexed (WRITE);
- STA8 ();
+ StackRelativeIndirectIndexed (WRITE, STA8);
}
static void Op93M0 (void)
{
- StackRelativeIndirectIndexed (WRITE);
- STA16 ();
+ StackRelativeIndirectIndexed (WRITE, STA16);
}
/**********************************************************************************************/
/* STX *************************************************************************************** */
static void Op86X1 (void)
{
- Direct (WRITE);
- STX8 ();
+ Direct (WRITE, STX8);
}
static void Op86X0 (void)
{
- Direct (WRITE);
- STX16 ();
+ Direct (WRITE, STX16);
}
static void Op96X1 (void)
{
- DirectIndexedY (WRITE);
- STX8 ();
+ DirectIndexedY (WRITE, STX8);
}
static void Op96X0 (void)
{
- DirectIndexedY (WRITE);
- STX16 ();
+ DirectIndexedY (WRITE, STX16);
}
static void Op8EX1 (void)
{
- Absolute (WRITE);
- STX8 ();
+ Absolute (WRITE, STX8);
}
static void Op8EX0 (void)
{
- Absolute (WRITE);
- STX16 ();
+ Absolute (WRITE, STX16);
}
/**********************************************************************************************/
/* STY *************************************************************************************** */
static void Op84X1 (void)
{
- Direct (WRITE);
- STY8 ();
+ Direct (WRITE, STY8);
}
static void Op84X0 (void)
{
- Direct (WRITE);
- STY16 ();
+ Direct (WRITE, STY16);
}
static void Op94X1 (void)
{
- DirectIndexedX (WRITE);
- STY8 ();
+ DirectIndexedX (WRITE, STY8);
}
static void Op94X0 (void)
{
- DirectIndexedX (WRITE);
- STY16 ();
+ DirectIndexedX (WRITE, STY16);
}
static void Op8CX1 (void)
{
- Absolute (WRITE);
- STY8 ();
+ Absolute (WRITE, STY8);
}
static void Op8CX0 (void)
{
- Absolute (WRITE);
- STY16 ();
+ Absolute (WRITE, STY16);
}
/**********************************************************************************************/
/* STZ *************************************************************************************** */
static void Op64M1 (void)
{
- Direct (WRITE);
- STZ8 ();
+ Direct (WRITE, STZ8);
}
static void Op64M0 (void)
{
- Direct (WRITE);
- STZ16 ();
+ Direct (WRITE, STZ16);
}
static void Op74M1 (void)
{
- DirectIndexedX (WRITE);
- STZ8 ();
+ DirectIndexedX (WRITE, STZ8);
}
static void Op74M0 (void)
{
- DirectIndexedX (WRITE);
- STZ16 ();
+ DirectIndexedX (WRITE, STZ16);
}
static void Op9CM1 (void)
{
- Absolute (WRITE);
- STZ8 ();
+ Absolute (WRITE, STZ8);
}
static void Op9CM0 (void)
{
- Absolute (WRITE);
- STZ16 ();
+ Absolute (WRITE, STZ16);
}
static void Op9EM1 (void)
{
- AbsoluteIndexedX (WRITE);
- STZ8 ();
+ AbsoluteIndexedX (WRITE, STZ8);
}
static void Op9EM0 (void)
{
- AbsoluteIndexedX (WRITE);
- STZ16 ();
+ AbsoluteIndexedX (WRITE, STZ16);
}
/**********************************************************************************************/
@@ -2451,52 +2119,44 @@ static void Op9EM0 (void)
/* TRB *************************************************************************************** */
static void Op14M1 (void)
{
- Direct (MODIFY);
- TRB8 ();
+ Direct (MODIFY, TRB8);
}
static void Op14M0 (void)
{
- Direct (MODIFY);
- TRB16 ();
+ Direct (MODIFY, TRB16);
}
static void Op1CM1 (void)
{
- Absolute (MODIFY);
- TRB8 ();
+ Absolute (MODIFY, TRB8);
}
static void Op1CM0 (void)
{
- Absolute (MODIFY);
- TRB16 ();
+ Absolute (MODIFY, TRB16);
}
/**********************************************************************************************/
/* TSB *************************************************************************************** */
static void Op04M1 (void)
{
- Direct (MODIFY);
- TSB8 ();
+ Direct (MODIFY, TSB8);
}
static void Op04M0 (void)
{
- Direct (MODIFY);
- TSB16 ();
+ Direct (MODIFY, TSB16);
}
static void Op0CM1 (void)
{
- Absolute (MODIFY);
- TSB8 ();
+ Absolute (MODIFY, TSB8);
}
static void Op0CM0 (void)
{
- Absolute (MODIFY);
- TSB16 ();
+ Absolute (MODIFY, TSB16);
}
/**********************************************************************************************/
@@ -2608,7 +2268,7 @@ inline void CPUShutdown()
/* BCC */
static void Op90 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck0 ();
if (!CheckCarry ())
{
@@ -2616,14 +2276,14 @@ static void Op90 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- CPUShutdown ();
+ CPUShutdown();
}
}
/* BCS */
static void OpB0 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck0 ();
if (CheckCarry ())
{
@@ -2638,7 +2298,7 @@ static void OpB0 (void)
/* BEQ */
static void OpF0 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck2 ();
if (CheckZero ())
{
@@ -2653,7 +2313,7 @@ static void OpF0 (void)
/* BMI */
static void Op30 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck1 ();
if (CheckNegative ())
{
@@ -2668,7 +2328,7 @@ static void Op30 (void)
/* BNE */
static void OpD0 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck1 ();
if (!CheckZero ())
{
@@ -2684,7 +2344,7 @@ static void OpD0 (void)
/* BPL */
static void Op10 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck1 ();
if (!CheckNegative ())
{
@@ -2699,7 +2359,7 @@ static void Op10 (void)
/* BRA */
static void Op80 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
CPU.PC = CPU.PCBase + OpAddress;
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
@@ -2710,7 +2370,7 @@ static void Op80 (void)
/* BVC */
static void Op50 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck0 ();
if (!CheckOverflow ())
{
@@ -2725,7 +2385,7 @@ static void Op50 (void)
/* BVS */
static void Op70 (void)
{
- Relative (JUMP);
+ Relative (JUMP, OpAddressPassthrough);
BranchCheck0 ();
if (CheckOverflow ())
{
@@ -2787,8 +2447,8 @@ static void OpCAX1 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.XL--;
- SetZN8 (Registers.XL);
+ ICPU.Registers.XL--;
+ SetZN8 (ICPU.Registers.XL);
}
static void OpCAX0 (void)
@@ -2800,8 +2460,8 @@ static void OpCAX0 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.X.W--;
- SetZN16 (Registers.X.W);
+ ICPU.Registers.X.W--;
+ SetZN16 (ICPU.Registers.X.W);
}
static void Op88X1 (void)
@@ -2813,8 +2473,8 @@ static void Op88X1 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.YL--;
- SetZN8 (Registers.YL);
+ ICPU.Registers.YL--;
+ SetZN8 (ICPU.Registers.YL);
}
static void Op88X0 (void)
@@ -2826,8 +2486,8 @@ static void Op88X0 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.Y.W--;
- SetZN16 (Registers.Y.W);
+ ICPU.Registers.Y.W--;
+ SetZN16 (ICPU.Registers.Y.W);
}
/**********************************************************************************************/
@@ -2841,8 +2501,8 @@ static void OpE8X1 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.XL++;
- SetZN8 (Registers.XL);
+ ICPU.Registers.XL++;
+ SetZN8 (ICPU.Registers.XL);
}
static void OpE8X0 (void)
@@ -2854,8 +2514,8 @@ static void OpE8X0 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.X.W++;
- SetZN16 (Registers.X.W);
+ ICPU.Registers.X.W++;
+ SetZN16 (ICPU.Registers.X.W);
}
static void OpC8X1 (void)
@@ -2867,8 +2527,8 @@ static void OpC8X1 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.YL++;
- SetZN8 (Registers.YL);
+ ICPU.Registers.YL++;
+ SetZN8 (ICPU.Registers.YL);
}
static void OpC8X0 (void)
@@ -2880,8 +2540,8 @@ static void OpC8X0 (void)
CPU.WaitAddress = NULL;
#endif
- Registers.Y.W++;
- SetZN16 (Registers.Y.W);
+ ICPU.Registers.Y.W++;
+ SetZN16 (ICPU.Registers.Y.W);
}
/**********************************************************************************************/
@@ -2898,69 +2558,69 @@ static void OpEA (void)
/* PUSH Instructions ************************************************************************* */
/* #define PushW(w) \
- * S9xSetWord (w, Registers.S.W - 1);\
- * Registers.S.W -= 2;
+ * S9xSetWord (w, ICPU.Registers.S.W - 1);\
+ * ICPU.Registers.S.W -= 2;
*/
#define PushB(b)\
- S9xSetByte (b, Registers.S.W--);
+ S9xSetByte (b, ICPU.Registers.S.W--);
#define PushBE(b)\
- S9xSetByte (b, Registers.S.W--);\
- Registers.SH=0x01;
+ S9xSetByte (b, ICPU.Registers.S.W--);\
+ ICPU.Registers.SH=0x01;
#define PushW(w) \
- S9xSetByte ((w)>>8, Registers.S.W);\
- S9xSetByte ((w)&0xff, (Registers.S.W - 1)&0xFFFF);\
- Registers.S.W -= 2;
+ S9xSetByte ((w)>>8, ICPU.Registers.S.W);\
+ S9xSetByte ((w)&0xff, (ICPU.Registers.S.W - 1)&0xFFFF);\
+ ICPU.Registers.S.W -= 2;
#define PushWE(w) \
- S9xSetByte ((w)>>8, Registers.S.W--);\
- Registers.SH=0x01;\
- S9xSetByte ((w)&0xff, (Registers.S.W--)&0xFFFF);\
- Registers.SH = 0x01;
+ S9xSetByte ((w)>>8, ICPU.Registers.S.W--);\
+ ICPU.Registers.SH=0x01;\
+ S9xSetByte ((w)&0xff, (ICPU.Registers.S.W--)&0xFFFF);\
+ ICPU.Registers.SH = 0x01;
#define PushWENew(w) \
- S9xSetByte ((w)>>8, Registers.S.W--);\
- S9xSetByte ((w)&0xff, (Registers.S.W--)&0xFFFF);\
- Registers.SH = 0x01;
+ S9xSetByte ((w)>>8, ICPU.Registers.S.W--);\
+ S9xSetByte ((w)&0xff, (ICPU.Registers.S.W--)&0xFFFF);\
+ ICPU.Registers.SH = 0x01;
//PEA NL
static void OpF4E1 (void)
{
- Absolute (NONE);
+ Absolute (NONE, OpAddressPassthrough);
PushWENew ((unsigned short)OpAddress);
}
static void OpF4 (void)
{
- Absolute (NONE);
+ Absolute (NONE, OpAddressPassthrough);
PushW ((unsigned short)OpAddress);
}
//PEI NL
static void OpD4E1 (void)
{
- DirectIndirect (NONE);
+ DirectIndirect (NONE, OpAddressPassthrough);
PushWENew ((unsigned short)OpAddress);
}
static void OpD4 (void)
{
- DirectIndirect (NONE);
+ DirectIndirect (NONE, OpAddressPassthrough);
PushW ((unsigned short)OpAddress);
}
//PER NL
static void Op62E1 (void)
{
- RelativeLong (NONE);
+ RelativeLong (NONE, OpAddressPassthrough);
PushWENew ((unsigned short)OpAddress);
}
static void Op62 (void)
{
- RelativeLong (NONE);
+ RelativeLong (NONE, OpAddressPassthrough);
PushW ((unsigned short)OpAddress);
}
@@ -2968,7 +2628,7 @@ static void Op62 (void)
//PHA
static void Op48E1 (void)
{
- PushBE (Registers.AL);
+ PushBE (ICPU.Registers.AL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -2976,7 +2636,7 @@ static void Op48E1 (void)
static void Op48M1 (void)
{
- PushB (Registers.AL);
+ PushB (ICPU.Registers.AL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -2984,7 +2644,7 @@ static void Op48M1 (void)
static void Op48M0 (void)
{
- PushW (Registers.A.W);
+ PushW (ICPU.Registers.A.W);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -2993,14 +2653,14 @@ static void Op48M0 (void)
//PHB
static void Op8BE1 (void)
{
- PushBE (Registers.DB);
+ PushBE (ICPU.Registers.DB);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
}
static void Op8B (void)
{
- PushB (Registers.DB);
+ PushB (ICPU.Registers.DB);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3009,7 +2669,7 @@ static void Op8B (void)
//PHD NL
static void Op0BE1 (void)
{
- PushWENew (Registers.D.W);
+ PushWENew (ICPU.Registers.D.W);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3017,7 +2677,7 @@ static void Op0BE1 (void)
static void Op0B (void)
{
- PushW (Registers.D.W);
+ PushW (ICPU.Registers.D.W);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3026,7 +2686,7 @@ static void Op0B (void)
//PHK
static void Op4BE1 (void)
{
- PushBE (Registers.PB);
+ PushBE (ICPU.Registers.PB);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3034,7 +2694,7 @@ static void Op4BE1 (void)
static void Op4B (void)
{
- PushB (Registers.PB);
+ PushB (ICPU.Registers.PB);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3044,7 +2704,7 @@ static void Op4B (void)
static void Op08E1 (void)
{
S9xPackStatus ();
- PushBE (Registers.PL);
+ PushBE (ICPU.Registers.PL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3053,7 +2713,7 @@ static void Op08E1 (void)
static void Op08 (void)
{
S9xPackStatus ();
- PushB (Registers.PL);
+ PushB (ICPU.Registers.PL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3062,7 +2722,7 @@ static void Op08 (void)
//PHX
static void OpDAE1 (void)
{
- PushBE (Registers.XL);
+ PushBE (ICPU.Registers.XL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3070,7 +2730,7 @@ static void OpDAE1 (void)
static void OpDAX1 (void)
{
- PushB (Registers.XL);
+ PushB (ICPU.Registers.XL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3078,7 +2738,7 @@ static void OpDAX1 (void)
static void OpDAX0 (void)
{
- PushW (Registers.X.W);
+ PushW (ICPU.Registers.X.W);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3087,7 +2747,7 @@ static void OpDAX0 (void)
//PHY
static void Op5AE1 (void)
{
- PushBE (Registers.YL);
+ PushBE (ICPU.Registers.YL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3095,7 +2755,7 @@ static void Op5AE1 (void)
static void Op5AX1 (void)
{
- PushB (Registers.YL);
+ PushB (ICPU.Registers.YL);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3103,7 +2763,7 @@ static void Op5AX1 (void)
static void Op5AX0 (void)
{
- PushW (Registers.Y.W);
+ PushW (ICPU.Registers.Y.W);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
@@ -3112,32 +2772,32 @@ static void Op5AX0 (void)
/* PULL Instructions ************************************************************************* */
#define PullW(w) \
- w = S9xGetByte (++Registers.S.W); \
- w |= (S9xGetByte (++Registers.S.W)<<8);
+ w = S9xGetByte (++ICPU.Registers.S.W); \
+ w |= (S9xGetByte (++ICPU.Registers.S.W)<<8);
-/* w = S9xGetWord (Registers.S.W + 1); \
- Registers.S.W += 2;
+/* w = S9xGetWord (ICPU.Registers.S.W + 1); \
+ ICPU.Registers.S.W += 2;
*/
#define PullB(b)\
- b = S9xGetByte (++Registers.S.W);
+ b = S9xGetByte (++ICPU.Registers.S.W);
#define PullBE(b)\
- Registers.S.W++;\
- Registers.SH=0x01;\
- b = S9xGetByte (Registers.S.W);
+ ICPU.Registers.S.W++;\
+ ICPU.Registers.SH=0x01;\
+ b = S9xGetByte (ICPU.Registers.S.W);
#define PullWE(w) \
- Registers.S.W++;\
- Registers.SH=0x01;\
- w = S9xGetByte (Registers.S.W); \
- Registers.S.W++; \
- Registers.SH=0x01;\
- w |= (S9xGetByte (Registers.S.W)<<8);
+ ICPU.Registers.S.W++;\
+ ICPU.Registers.SH=0x01;\
+ w = S9xGetByte (ICPU.Registers.S.W); \
+ ICPU.Registers.S.W++; \
+ ICPU.Registers.SH=0x01;\
+ w |= (S9xGetByte (ICPU.Registers.S.W)<<8);
#define PullWENew(w) \
PullW(w);\
- Registers.SH=0x01;
+ ICPU.Registers.SH=0x01;
//PLA
static void Op68E1 (void)
@@ -3145,8 +2805,8 @@ static void Op68E1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullBE (Registers.AL);
- SetZN8 (Registers.AL);
+ PullBE (ICPU.Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
}
static void Op68M1 (void)
@@ -3154,8 +2814,8 @@ static void Op68M1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullB (Registers.AL);
- SetZN8 (Registers.AL);
+ PullB (ICPU.Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
}
static void Op68M0 (void)
@@ -3163,8 +2823,8 @@ static void Op68M0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullW (Registers.A.W);
- SetZN16 (Registers.A.W);
+ PullW (ICPU.Registers.A.W);
+ SetZN16 (ICPU.Registers.A.W);
}
//PLB
@@ -3173,9 +2833,9 @@ static void OpABE1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullBE (Registers.DB);
- SetZN8 (Registers.DB);
- ICPU.ShiftedDB = Registers.DB << 16;
+ PullBE (ICPU.Registers.DB);
+ SetZN8 (ICPU.Registers.DB);
+ ICPU.ShiftedDB = ICPU.Registers.DB << 16;
}
static void OpAB (void)
@@ -3183,9 +2843,9 @@ static void OpAB (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullB (Registers.DB);
- SetZN8 (Registers.DB);
- ICPU.ShiftedDB = Registers.DB << 16;
+ PullB (ICPU.Registers.DB);
+ SetZN8 (ICPU.Registers.DB);
+ ICPU.ShiftedDB = ICPU.Registers.DB << 16;
}
/* PHP */
@@ -3195,8 +2855,8 @@ static void Op2BE1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullWENew (Registers.D.W);
- SetZN16 (Registers.D.W);
+ PullWENew (ICPU.Registers.D.W);
+ SetZN16 (ICPU.Registers.D.W);
}
static void Op2B (void)
@@ -3204,8 +2864,8 @@ static void Op2B (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullW (Registers.D.W);
- SetZN16 (Registers.D.W);
+ PullW (ICPU.Registers.D.W);
+ SetZN16 (ICPU.Registers.D.W);
}
/* PLP */
@@ -3214,13 +2874,13 @@ static void Op28E1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullBE (Registers.PL);
+ PullBE (ICPU.Registers.PL);
S9xUnpackStatus ();
if (CheckIndex ())
{
- Registers.XH = 0;
- Registers.YH = 0;
+ ICPU.Registers.XH = 0;
+ ICPU.Registers.YH = 0;
}
S9xFixCycles();
/* CHECK_FOR_IRQ();*/
@@ -3231,13 +2891,13 @@ static void Op28 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullB (Registers.PL);
+ PullB (ICPU.Registers.PL);
S9xUnpackStatus ();
if (CheckIndex ())
{
- Registers.XH = 0;
- Registers.YH = 0;
+ ICPU.Registers.XH = 0;
+ ICPU.Registers.YH = 0;
}
S9xFixCycles();
/* CHECK_FOR_IRQ();*/
@@ -3249,8 +2909,8 @@ static void OpFAE1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullBE (Registers.XL);
- SetZN8 (Registers.XL);
+ PullBE (ICPU.Registers.XL);
+ SetZN8 (ICPU.Registers.XL);
}
static void OpFAX1 (void)
@@ -3258,8 +2918,8 @@ static void OpFAX1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullB (Registers.XL);
- SetZN8 (Registers.XL);
+ PullB (ICPU.Registers.XL);
+ SetZN8 (ICPU.Registers.XL);
}
static void OpFAX0 (void)
@@ -3267,8 +2927,8 @@ static void OpFAX0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullW (Registers.X.W);
- SetZN16 (Registers.X.W);
+ PullW (ICPU.Registers.X.W);
+ SetZN16 (ICPU.Registers.X.W);
}
//PLY
@@ -3277,8 +2937,8 @@ static void Op7AE1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullBE (Registers.YL);
- SetZN8 (Registers.YL);
+ PullBE (ICPU.Registers.YL);
+ SetZN8 (ICPU.Registers.YL);
}
static void Op7AX1 (void)
@@ -3286,8 +2946,8 @@ static void Op7AX1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullB (Registers.YL);
- SetZN8 (Registers.YL);
+ PullB (ICPU.Registers.YL);
+ SetZN8 (ICPU.Registers.YL);
}
static void Op7AX0 (void)
@@ -3295,8 +2955,8 @@ static void Op7AX0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
- PullW (Registers.Y.W);
- SetZN16 (Registers.Y.W);
+ PullW (ICPU.Registers.Y.W);
+ SetZN16 (ICPU.Registers.Y.W);
}
/**********************************************************************************************/
@@ -3338,8 +2998,8 @@ static void OpAAX1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.XL = Registers.AL;
- SetZN8 (Registers.XL);
+ ICPU.Registers.XL = ICPU.Registers.AL;
+ SetZN8 (ICPU.Registers.XL);
}
/* TAX16 */
@@ -3348,8 +3008,8 @@ static void OpAAX0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.X.W = Registers.A.W;
- SetZN16 (Registers.X.W);
+ ICPU.Registers.X.W = ICPU.Registers.A.W;
+ SetZN16 (ICPU.Registers.X.W);
}
/* TAY8 */
@@ -3358,8 +3018,8 @@ static void OpA8X1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.YL = Registers.AL;
- SetZN8 (Registers.YL);
+ ICPU.Registers.YL = ICPU.Registers.AL;
+ SetZN8 (ICPU.Registers.YL);
}
/* TAY16 */
@@ -3368,8 +3028,8 @@ static void OpA8X0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.Y.W = Registers.A.W;
- SetZN16 (Registers.Y.W);
+ ICPU.Registers.Y.W = ICPU.Registers.A.W;
+ SetZN16 (ICPU.Registers.Y.W);
}
static void Op5B (void)
@@ -3377,8 +3037,8 @@ static void Op5B (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.D.W = Registers.A.W;
- SetZN16 (Registers.D.W);
+ ICPU.Registers.D.W = ICPU.Registers.A.W;
+ SetZN16 (ICPU.Registers.D.W);
}
static void Op1B (void)
@@ -3386,9 +3046,9 @@ static void Op1B (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.S.W = Registers.A.W;
+ ICPU.Registers.S.W = ICPU.Registers.A.W;
if (CheckEmulation())
- Registers.SH = 1;
+ ICPU.Registers.SH = 1;
}
static void Op7B (void)
@@ -3396,8 +3056,8 @@ static void Op7B (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.A.W = Registers.D.W;
- SetZN16 (Registers.A.W);
+ ICPU.Registers.A.W = ICPU.Registers.D.W;
+ SetZN16 (ICPU.Registers.A.W);
}
static void Op3B (void)
@@ -3405,8 +3065,8 @@ static void Op3B (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.A.W = Registers.S.W;
- SetZN16 (Registers.A.W);
+ ICPU.Registers.A.W = ICPU.Registers.S.W;
+ SetZN16 (ICPU.Registers.A.W);
}
static void OpBAX1 (void)
@@ -3414,8 +3074,8 @@ static void OpBAX1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.XL = Registers.SL;
- SetZN8 (Registers.XL);
+ ICPU.Registers.XL = ICPU.Registers.SL;
+ SetZN8 (ICPU.Registers.XL);
}
static void OpBAX0 (void)
@@ -3423,8 +3083,8 @@ static void OpBAX0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.X.W = Registers.S.W;
- SetZN16 (Registers.X.W);
+ ICPU.Registers.X.W = ICPU.Registers.S.W;
+ SetZN16 (ICPU.Registers.X.W);
}
static void Op8AM1 (void)
@@ -3432,8 +3092,8 @@ static void Op8AM1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.AL = Registers.XL;
- SetZN8 (Registers.AL);
+ ICPU.Registers.AL = ICPU.Registers.XL;
+ SetZN8 (ICPU.Registers.AL);
}
static void Op8AM0 (void)
@@ -3441,8 +3101,8 @@ static void Op8AM0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.A.W = Registers.X.W;
- SetZN16 (Registers.A.W);
+ ICPU.Registers.A.W = ICPU.Registers.X.W;
+ SetZN16 (ICPU.Registers.A.W);
}
static void Op9A (void)
@@ -3450,9 +3110,9 @@ static void Op9A (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.S.W = Registers.X.W;
+ ICPU.Registers.S.W = ICPU.Registers.X.W;
if (CheckEmulation())
- Registers.SH = 1;
+ ICPU.Registers.SH = 1;
}
static void Op9BX1 (void)
@@ -3460,8 +3120,8 @@ static void Op9BX1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.YL = Registers.XL;
- SetZN8 (Registers.YL);
+ ICPU.Registers.YL = ICPU.Registers.XL;
+ SetZN8 (ICPU.Registers.YL);
}
static void Op9BX0 (void)
@@ -3469,8 +3129,8 @@ static void Op9BX0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.Y.W = Registers.X.W;
- SetZN16 (Registers.Y.W);
+ ICPU.Registers.Y.W = ICPU.Registers.X.W;
+ SetZN16 (ICPU.Registers.Y.W);
}
static void Op98M1 (void)
@@ -3478,8 +3138,8 @@ static void Op98M1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.AL = Registers.YL;
- SetZN8 (Registers.AL);
+ ICPU.Registers.AL = ICPU.Registers.YL;
+ SetZN8 (ICPU.Registers.AL);
}
static void Op98M0 (void)
@@ -3487,8 +3147,8 @@ static void Op98M0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.A.W = Registers.Y.W;
- SetZN16 (Registers.A.W);
+ ICPU.Registers.A.W = ICPU.Registers.Y.W;
+ SetZN16 (ICPU.Registers.A.W);
}
static void OpBBX1 (void)
@@ -3496,8 +3156,8 @@ static void OpBBX1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.XL = Registers.YL;
- SetZN8 (Registers.XL);
+ ICPU.Registers.XL = ICPU.Registers.YL;
+ SetZN8 (ICPU.Registers.XL);
}
static void OpBBX0 (void)
@@ -3505,8 +3165,8 @@ static void OpBBX0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
#endif
- Registers.X.W = Registers.Y.W;
- SetZN16 (Registers.X.W);
+ ICPU.Registers.X.W = ICPU.Registers.Y.W;
+ SetZN16 (ICPU.Registers.X.W);
}
/**********************************************************************************************/
@@ -3518,21 +3178,21 @@ static void OpFB (void)
CPU.Cycles += ONE_CYCLE;
#endif
- A1 = ICPU._Carry;
- A2 = Registers.PH;
+ uint8 A1 = ICPU._Carry;
+ uint8 A2 = ICPU.Registers.PH;
ICPU._Carry = A2 & 1;
- Registers.PH = A1;
+ ICPU.Registers.PH = A1;
if (CheckEmulation())
{
SetFlags (MemoryFlag | IndexFlag);
- Registers.SH = 1;
+ ICPU.Registers.SH = 1;
missing.emulate6502 = 1;
}
if (CheckIndex ())
{
- Registers.XH = 0;
- Registers.YH = 0;
+ ICPU.Registers.XH = 0;
+ ICPU.Registers.YH = 0;
}
S9xFixCycles();
}
@@ -3552,15 +3212,17 @@ static void Op00 (void)
if (!CheckEmulation())
{
- PushB (Registers.PB);
+ PushB (ICPU.Registers.PB);
PushW (CPU.PC - CPU.PCBase + 1);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
S9xSetPCBase (S9xGetWord (0xFFE6));
#ifndef SA1_OPCODES
@@ -3571,12 +3233,14 @@ static void Op00 (void)
{
PushW (CPU.PC - CPU.PCBase);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
S9xSetPCBase (S9xGetWord (0xFFFE));
#ifndef SA1_OPCODES
@@ -3589,7 +3253,7 @@ static void Op00 (void)
/* BRL ************************************************************************************** */
static void Op82 (void)
{
- RelativeLong (JUMP);
+ RelativeLong (JUMP, OpAddressPassthrough);
S9xSetPCBase (ICPU.ShiftedPB + OpAddress);
}
/**********************************************************************************************/
@@ -3603,15 +3267,17 @@ void S9xOpcode_IRQ (void)
#endif
if (!CheckEmulation())
{
- PushB (Registers.PB);
+ PushB (ICPU.Registers.PB);
PushW (CPU.PC - CPU.PCBase);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
#ifdef SA1_OPCODES
S9xSA1SetPCBase (Memory.FillRAM [0x2207] |
@@ -3631,12 +3297,14 @@ void S9xOpcode_IRQ (void)
{
PushW (CPU.PC - CPU.PCBase);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
#ifdef SA1_OPCODES
S9xSA1SetPCBase (Memory.FillRAM [0x2207] |
@@ -3665,15 +3333,17 @@ void S9xOpcode_NMI (void)
#endif
if (!CheckEmulation())
{
- PushB (Registers.PB);
+ PushB (ICPU.Registers.PB);
PushW (CPU.PC - CPU.PCBase);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
#ifdef SA1_OPCODES
S9xSA1SetPCBase (Memory.FillRAM [0x2205] |
@@ -3693,12 +3363,14 @@ void S9xOpcode_NMI (void)
{
PushW (CPU.PC - CPU.PCBase);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
#ifdef SA1_OPCODES
S9xSA1SetPCBase (Memory.FillRAM [0x2205] |
@@ -3726,15 +3398,17 @@ static void Op02 (void)
#endif
if (!CheckEmulation())
{
- PushB (Registers.PB);
+ PushB (ICPU.Registers.PB);
PushW (CPU.PC - CPU.PCBase + 1);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
S9xSetPCBase (S9xGetWord (0xFFE4));
#ifndef SA1_OPCODES
@@ -3745,12 +3419,14 @@ static void Op02 (void)
{
PushW (CPU.PC - CPU.PCBase);
S9xPackStatus ();
- PushB (Registers.PL);
- OpenBus = Registers.PL;
+ PushB (ICPU.Registers.PL);
+#ifndef NO_OPEN_BUS
+ OpenBus = ICPU.Registers.PL;
+#endif
ClearDecimal ();
SetIRQ ();
- Registers.PB = 0;
+ ICPU.Registers.PB = 0;
ICPU.ShiftedPB = 0;
S9xSetPCBase (S9xGetWord (0xFFF4));
#ifndef SA1_OPCODES
@@ -3763,8 +3439,8 @@ static void Op02 (void)
/* JML *************************************************************************************** */
static void OpDC (void)
{
- AbsoluteIndirectLong (JUMP);
- Registers.PB = (uint8) (OpAddress >> 16);
+ AbsoluteIndirectLong (JUMP, OpAddressPassthrough);
+ ICPU.Registers.PB = (uint8) (OpAddress >> 16);
ICPU.ShiftedPB = OpAddress & 0xff0000;
S9xSetPCBase (OpAddress);
#ifndef SA1_OPCODES
@@ -3774,8 +3450,8 @@ static void OpDC (void)
static void Op5C (void)
{
- AbsoluteLong (JUMP);
- Registers.PB = (uint8) (OpAddress >> 16);
+ AbsoluteLong (JUMP, OpAddressPassthrough);
+ ICPU.Registers.PB = (uint8) (OpAddress >> 16);
ICPU.ShiftedPB = OpAddress & 0xff0000;
S9xSetPCBase (OpAddress);
}
@@ -3784,7 +3460,7 @@ static void Op5C (void)
/* JMP *************************************************************************************** */
static void Op4C (void)
{
- Absolute (JUMP);
+ Absolute (JUMP, OpAddressPassthrough);
S9xSetPCBase (ICPU.ShiftedPB + (OpAddress & 0xffff));
#if defined(CPU_SHUTDOWN) && defined(SA1_OPCODES)
CPUShutdown ();
@@ -3793,13 +3469,13 @@ static void Op4C (void)
static void Op6C (void)
{
- AbsoluteIndirect (JUMP);
+ AbsoluteIndirect (JUMP, OpAddressPassthrough);
S9xSetPCBase (ICPU.ShiftedPB + (OpAddress & 0xffff));
}
static void Op7C (void)
{
- AbsoluteIndexedIndirect (JUMP);
+ AbsoluteIndexedIndirect (JUMP, OpAddressPassthrough);
S9xSetPCBase (ICPU.ShiftedPB + OpAddress);
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE;
@@ -3810,30 +3486,30 @@ static void Op7C (void)
/* JSL/RTL *********************************************************************************** */
static void Op22E1 (void)
{
- AbsoluteLong (JUMP);
- PushB (Registers.PB);
+ AbsoluteLong (JUMP, OpAddressPassthrough);
+ PushB (ICPU.Registers.PB);
PushWENew (CPU.PC - CPU.PCBase - 1);
- Registers.PB = (uint8) (OpAddress >> 16);
+ ICPU.Registers.PB = (uint8) (OpAddress >> 16);
ICPU.ShiftedPB = OpAddress & 0xff0000;
S9xSetPCBase (OpAddress);
}
static void Op22 (void)
{
- AbsoluteLong (JUMP);
- PushB (Registers.PB);
+ AbsoluteLong (JUMP, OpAddressPassthrough);
+ PushB (ICPU.Registers.PB);
PushW (CPU.PC - CPU.PCBase - 1);
- Registers.PB = (uint8) (OpAddress >> 16);
+ ICPU.Registers.PB = (uint8) (OpAddress >> 16);
ICPU.ShiftedPB = OpAddress & 0xff0000;
S9xSetPCBase (OpAddress);
}
static void Op6BE1 (void)
{
- PullWENew (Registers.PC);
- PullB (Registers.PB);
- ICPU.ShiftedPB = Registers.PB << 16;
- S9xSetPCBase (ICPU.ShiftedPB + ((Registers.PC + 1) & 0xffff));
+ PullWENew (ICPU.Registers.PC);
+ PullB (ICPU.Registers.PB);
+ ICPU.ShiftedPB = ICPU.Registers.PB << 16;
+ S9xSetPCBase (ICPU.ShiftedPB + ((ICPU.Registers.PC + 1) & 0xffff));
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
@@ -3841,10 +3517,10 @@ static void Op6BE1 (void)
static void Op6B (void)
{
- PullW (Registers.PC);
- PullB (Registers.PB);
- ICPU.ShiftedPB = Registers.PB << 16;
- S9xSetPCBase (ICPU.ShiftedPB + ((Registers.PC + 1) & 0xffff));
+ PullW (ICPU.Registers.PC);
+ PullB (ICPU.Registers.PB);
+ ICPU.ShiftedPB = ICPU.Registers.PB << 16;
+ S9xSetPCBase (ICPU.ShiftedPB + ((ICPU.Registers.PC + 1) & 0xffff));
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
@@ -3854,7 +3530,7 @@ static void Op6B (void)
/* JSR/RTS *********************************************************************************** */
static void Op20 (void)
{
- Absolute (JUMP);
+ Absolute (JUMP, OpAddressPassthrough);
PushW (CPU.PC - CPU.PCBase - 1);
S9xSetPCBase (ICPU.ShiftedPB + (OpAddress & 0xffff));
#ifndef SA1_OPCODES
@@ -3865,7 +3541,7 @@ static void Op20 (void)
//JSR a,x
static void OpFCE1 (void)
{
- AbsoluteIndexedIndirect (JUMP);
+ AbsoluteIndexedIndirect (JUMP, OpAddressPassthrough);
PushWENew (CPU.PC - CPU.PCBase - 1);
S9xSetPCBase (ICPU.ShiftedPB + OpAddress);
#ifndef SA1_OPCODES
@@ -3875,7 +3551,7 @@ static void OpFCE1 (void)
static void OpFC (void)
{
- AbsoluteIndexedIndirect (JUMP);
+ AbsoluteIndexedIndirect (JUMP, OpAddressPassthrough);
PushW (CPU.PC - CPU.PCBase - 1);
S9xSetPCBase (ICPU.ShiftedPB + OpAddress);
#ifndef SA1_OPCODES
@@ -3885,8 +3561,8 @@ static void OpFC (void)
static void Op60 (void)
{
- PullW (Registers.PC);
- S9xSetPCBase (ICPU.ShiftedPB + ((Registers.PC + 1) & 0xffff));
+ PullW (ICPU.Registers.PC);
+ S9xSetPCBase (ICPU.ShiftedPB + ((ICPU.Registers.PC + 1) & 0xffff));
#ifndef SA1_OPCODES
CPU.Cycles += ONE_CYCLE * 3;
#endif
@@ -3903,17 +3579,20 @@ static void Op54X1 (void)
CPU.Cycles += CPU.MemSpeedx2 + TWO_CYCLES;
#endif
- Registers.DB = *CPU.PC++;
- ICPU.ShiftedDB = Registers.DB << 16;
- OpenBus = SrcBank = *CPU.PC++;
+ ICPU.Registers.DB = *CPU.PC++;
+ ICPU.ShiftedDB = ICPU.Registers.DB << 16;
+#ifndef NO_OPEN_BUS
+ OpenBus =
+#endif
+ SrcBank = *CPU.PC++;
- S9xSetByte (S9xGetByte ((SrcBank << 16) + Registers.X.W),
- ICPU.ShiftedDB + Registers.Y.W);
+ S9xSetByte (S9xGetByte ((SrcBank << 16) + ICPU.Registers.X.W),
+ ICPU.ShiftedDB + ICPU.Registers.Y.W);
- Registers.XL++;
- Registers.YL++;
- Registers.A.W--;
- if (Registers.A.W != 0xffff)
+ ICPU.Registers.XL++;
+ ICPU.Registers.YL++;
+ ICPU.Registers.A.W--;
+ if (ICPU.Registers.A.W != 0xffff)
CPU.PC -= 3;
}
@@ -3925,17 +3604,20 @@ static void Op54X0 (void)
CPU.Cycles += CPU.MemSpeedx2 + TWO_CYCLES;
#endif
- Registers.DB = *CPU.PC++;
- ICPU.ShiftedDB = Registers.DB << 16;
- OpenBus = SrcBank = *CPU.PC++;
+ ICPU.Registers.DB = *CPU.PC++;
+ ICPU.ShiftedDB = ICPU.Registers.DB << 16;
+#ifndef NO_OPEN_BUS
+ OpenBus =
+#endif
+ SrcBank = *CPU.PC++;
- S9xSetByte (S9xGetByte ((SrcBank << 16) + Registers.X.W),
- ICPU.ShiftedDB + Registers.Y.W);
+ S9xSetByte (S9xGetByte ((SrcBank << 16) + ICPU.Registers.X.W),
+ ICPU.ShiftedDB + ICPU.Registers.Y.W);
- Registers.X.W++;
- Registers.Y.W++;
- Registers.A.W--;
- if (Registers.A.W != 0xffff)
+ ICPU.Registers.X.W++;
+ ICPU.Registers.Y.W++;
+ ICPU.Registers.A.W--;
+ if (ICPU.Registers.A.W != 0xffff)
CPU.PC -= 3;
}
@@ -3946,16 +3628,19 @@ static void Op44X1 (void)
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2 + TWO_CYCLES;
#endif
- Registers.DB = *CPU.PC++;
- ICPU.ShiftedDB = Registers.DB << 16;
- OpenBus = SrcBank = *CPU.PC++;
- S9xSetByte (S9xGetByte ((SrcBank << 16) + Registers.X.W),
- ICPU.ShiftedDB + Registers.Y.W);
-
- Registers.XL--;
- Registers.YL--;
- Registers.A.W--;
- if (Registers.A.W != 0xffff)
+ ICPU.Registers.DB = *CPU.PC++;
+ ICPU.ShiftedDB = ICPU.Registers.DB << 16;
+#ifndef NO_OPEN_BUS
+ OpenBus =
+#endif
+ SrcBank = *CPU.PC++;
+ S9xSetByte (S9xGetByte ((SrcBank << 16) + ICPU.Registers.X.W),
+ ICPU.ShiftedDB + ICPU.Registers.Y.W);
+
+ ICPU.Registers.XL--;
+ ICPU.Registers.YL--;
+ ICPU.Registers.A.W--;
+ if (ICPU.Registers.A.W != 0xffff)
CPU.PC -= 3;
}
@@ -3966,16 +3651,19 @@ static void Op44X0 (void)
#ifndef SA1_OPCODES
CPU.Cycles += CPU.MemSpeedx2 + TWO_CYCLES;
#endif
- Registers.DB = *CPU.PC++;
- ICPU.ShiftedDB = Registers.DB << 16;
- OpenBus = SrcBank = *CPU.PC++;
- S9xSetByte (S9xGetByte ((SrcBank << 16) + Registers.X.W),
- ICPU.ShiftedDB + Registers.Y.W);
-
- Registers.X.W--;
- Registers.Y.W--;
- Registers.A.W--;
- if (Registers.A.W != 0xffff)
+ ICPU.Registers.DB = *CPU.PC++;
+ ICPU.ShiftedDB = ICPU.Registers.DB << 16;
+#ifndef NO_OPEN_BUS
+ OpenBus =
+#endif
+ SrcBank = *CPU.PC++;
+ S9xSetByte (S9xGetByte ((SrcBank << 16) + ICPU.Registers.X.W),
+ ICPU.ShiftedDB + ICPU.Registers.Y.W);
+
+ ICPU.Registers.X.W--;
+ ICPU.Registers.Y.W--;
+ ICPU.Registers.A.W--;
+ if (ICPU.Registers.A.W != 0xffff)
CPU.PC -= 3;
}
@@ -3984,8 +3672,8 @@ static void Op44X0 (void)
/* REP/SEP *********************************************************************************** */
static void OpC2 (void)
{
- Work8 = ~*CPU.PC++;
- Registers.PL &= Work8;
+ uint8 Work8 = ~*CPU.PC++;
+ ICPU.Registers.PL &= Work8;
ICPU._Carry &= Work8;
ICPU._Overflow &= (Work8 >> 6);
ICPU._Negative &= Work8;
@@ -4001,8 +3689,8 @@ static void OpC2 (void)
}
if (CheckIndex ())
{
- Registers.XH = 0;
- Registers.YH = 0;
+ ICPU.Registers.XH = 0;
+ ICPU.Registers.YH = 0;
}
S9xFixCycles();
/* CHECK_FOR_IRQ(); */
@@ -4010,8 +3698,8 @@ static void OpC2 (void)
static void OpE2 (void)
{
- Work8 = *CPU.PC++;
- Registers.PL |= Work8;
+ uint8 Work8 = *CPU.PC++;
+ ICPU.Registers.PL |= Work8;
ICPU._Carry |= Work8 & 1;
ICPU._Overflow |= (Work8 >> 6) & 1;
ICPU._Negative |= Work8;
@@ -4027,8 +3715,8 @@ static void OpE2 (void)
}
if (CheckIndex ())
{
- Registers.XH = 0;
- Registers.YH = 0;
+ ICPU.Registers.XH = 0;
+ ICPU.Registers.YH = 0;
}
S9xFixCycles();
}
@@ -4037,11 +3725,11 @@ static void OpE2 (void)
/* XBA *************************************************************************************** */
static void OpEB (void)
{
- Work8 = Registers.AL;
- Registers.AL = Registers.AH;
- Registers.AH = Work8;
+ uint8 Work8 = ICPU.Registers.AL;
+ ICPU.Registers.AL = ICPU.Registers.AH;
+ ICPU.Registers.AH = Work8;
- SetZN8 (Registers.AL);
+ SetZN8 (ICPU.Registers.AL);
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
@@ -4051,25 +3739,24 @@ static void OpEB (void)
/* RTI *************************************************************************************** */
static void Op40 (void)
{
- PullB (Registers.PL);
+ PullB (ICPU.Registers.PL);
S9xUnpackStatus ();
- PullW (Registers.PC);
+ PullW (ICPU.Registers.PC);
if (!CheckEmulation())
{
- PullB (Registers.PB);
- ICPU.ShiftedPB = Registers.PB << 16;
+ PullB (ICPU.Registers.PB);
+ ICPU.ShiftedPB = ICPU.Registers.PB << 16;
}
else
{
SetFlags (MemoryFlag | IndexFlag);
missing.emulate6502 = 1;
}
- S9xSetPCBase (ICPU.ShiftedPB + Registers.PC);
-
+ S9xSetPCBase (ICPU.ShiftedPB + ICPU.Registers.PC);
if (CheckIndex ())
{
- Registers.XH = 0;
- Registers.YH = 0;
+ ICPU.Registers.XH = 0;
+ ICPU.Registers.YH = 0;
}
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
@@ -4098,9 +3785,7 @@ static void OpCB (void)
SA1.Executing = FALSE;
do
{
- APU_EXECUTE1 ();
- } while (APU.Cycles < SA1.NextEvent);
- SA1.Executing = TRUE;
+ APU_EXECUTE1 (, } while (APU.Cycles < SA1.NextEvent, SA1.Executing = TRUE;
}
}
#endif
@@ -4138,8 +3823,8 @@ static void OpCB (void)
#ifndef SA1_OPCODES
CPU.Cycles += TWO_CYCLES;
#endif
-#endif
}
+#endif
}
#endif // SA1_OPCODES
}