summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m68hc16/cpu16.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2022-05-28 18:07:02 -0400
committer AJR <ajrhacker@users.noreply.github.com>2022-05-28 18:09:58 -0400
commitecd02a067f2771affa940f3e4c8b4b99069ec810 (patch)
treeebf820459ece0f52cfc3a457a6a681a8b6fdaff3 /src/devices/cpu/m68hc16/cpu16.cpp
parent439bc76f2bfdadc9581d268835f95eca6092004b (diff)
m68hc16: Update CPU16 core
- Reduce code duplication by making most loads subroutines in the state machine - Add ASLW, ASRW, LSRW, ROLW and RORW instructions to emulation - Fix overflow flag for 16-bit shifts
Diffstat (limited to 'src/devices/cpu/m68hc16/cpu16.cpp')
-rw-r--r--src/devices/cpu/m68hc16/cpu16.cpp1920
1 files changed, 518 insertions, 1402 deletions
diff --git a/src/devices/cpu/m68hc16/cpu16.cpp b/src/devices/cpu/m68hc16/cpu16.cpp
index 08f87783911..2d752d1768c 100644
--- a/src/devices/cpu/m68hc16/cpu16.cpp
+++ b/src/devices/cpu/m68hc16/cpu16.cpp
@@ -14,10 +14,9 @@
and debugging. (Adding to the confusion is that the typical CPU16 bus
interface uses 24-bit physical addresses, with or without a MMU.)
- The execution core is currently somewhat incomplete. 16-bit memory
- shifting instructions, indexed jump instructions, extended divisions
- and the MAC unit are not yet supported. Interrupts have also not been
- implemented yet.
+ The execution core is currently somewhat incomplete. Indexed jump
+ instructions, extended divisions and the MAC unit are not yet
+ supported. Interrupts have also not been implemented yet.
***************************************************************************/
@@ -31,36 +30,39 @@ enum class cpu16_device::seq : u16
BOOT_0, BOOT_1, BOOT_2, BOOT_3,
INVALID,
PREFETCH_1, PREFETCH_2,
+ LOAD8_EA, LOAD8_EXT,
+ LOAD16_EA, LOAD16_EA_LSB, LOAD16_EXT, LOAD16_EXT_LSB,
STORE8_EA, STORE8_EXT,
STORE16_EA, STORE16_EXT,
ABA,
ABX,
- ADDA_IND8, ADDA_IND8_2, ADDA_IND8_3, ADDA_IMM8, ADDA_IND16, ADDA_IND16_2, ADDA_IND16_3, ADDA_EXT, ADDA_INDE, ADDA_INDE_2, ADDA_INDE_3,
- ADDB_IND8, ADDB_IND8_2, ADDB_IND8_3, ADDB_IMM8, ADDB_IND16, ADDB_IND16_2, ADDB_IND16_3, ADDB_EXT, ADDB_INDE, ADDB_INDE_2, ADDB_INDE_3,
- ADDD_IND8, ADDD_IND8_2, ADDD_IND8_2B, ADDD_IND8_3, ADDD_IMM8, ADDD_IMM16, ADDD_IND16, ADDD_IND16_2, ADDD_IND16_2B, ADDD_IND16_3, ADDD_EXT, ADDD_INDE, ADDD_INDE_2, ADDD_INDE_2B, ADDD_INDE_3,
- ADDE_IMM8, ADDE_IMM16, ADDE_IND16, ADDE_IND16_2, ADDE_IND16_2B, ADDE_IND16_3, ADDE_EXT,
+ ADDA_IND8, ADDA_IND8_3, ADDA_IMM8, ADDA_IND16, ADDA_IND16_3, ADDA_EXT, ADDA_INDE, ADDA_INDE_3,
+ ADDB_IND8, ADDB_IND8_3, ADDB_IMM8, ADDB_IND16, ADDB_IND16_3, ADDB_EXT, ADDB_INDE, ADDB_INDE_3,
+ ADDD_IND8, ADDD_IND8_3, ADDD_IMM8, ADDD_IMM16, ADDD_IND16, ADDD_IND16_3, ADDD_EXT, ADDD_INDE, ADDD_INDE_3,
+ ADDE_IMM8, ADDE_IMM16, ADDE_IND16, ADDE_IND16_3, ADDE_EXT,
ADE,
ADX,
AEX,
AIX_IMM8, AIX_IMM16,
- ANDA_IND8, ANDA_IND8_2, ANDA_IND8_3, ANDA_IMM8, ANDA_IND16, ANDA_IND16_2, ANDA_IND16_3, ANDA_EXT, ANDA_INDE,
- ANDB_IND8, ANDB_IND8_2, ANDB_IND8_3, ANDB_IMM8, ANDB_IND16, ANDB_IND16_2, ANDB_IND16_3, ANDB_EXT, ANDB_INDE,
- ANDD_IND8, ANDD_IND8_2, ANDD_IND8_2B, ANDD_IND8_3, ANDD_IMM16, ANDD_IND16, ANDD_IND16_2, ANDD_IND16_2B, ANDD_IND16_3, ANDD_EXT, ANDD_INDE,
- ANDE_IMM16, ANDE_IND16, ANDE_IND16_2, ANDE_IND16_2B, ANDE_IND16_3, ANDE_EXT,
+ ANDA_IND8, ANDA_IND8_3, ANDA_IMM8, ANDA_IND16, ANDA_IND16_3, ANDA_EXT, ANDA_INDE,
+ ANDB_IND8, ANDB_IND8_3, ANDB_IMM8, ANDB_IND16, ANDB_IND16_3, ANDB_EXT, ANDB_INDE,
+ ANDD_IND8, ANDD_IND8_3, ANDD_IMM16, ANDD_IND16, ANDD_IND16_3, ANDD_EXT, ANDD_INDE,
+ ANDE_IMM16, ANDE_IND16, ANDE_IND16_3, ANDE_EXT,
ANDP,
- ASR_IND8, ASR_IND8_2, ASR_IND8_3, ASR_IND16, ASR_IND16_2, ASR_IND16_3, ASR_EXT,
+ ASR_IND8, ASR_IND8_3, ASR_IND16, ASR_IND16_3, ASR_EXT,
ASRA,
ASRB,
ASRD,
ASRE,
- BCLR_IND16, BCLR_IND16_2, BCLR_IND16_3, BCLR_EXT, BCLR_IND8, BCLR_IND8_2, BCLR_IND8_3,
- BCLRW_IND16, BCLRW_IND16_2, BCLRW_IND16_2B, BCLRW_IND16_3, BCLRW_EXT,
- BITA_IND8, BITA_IND8_2, BITA_IND8_3, BITA_IMM8, BITA_IND16, BITA_IND16_2, BITA_IND16_3, BITA_EXT, BITA_INDE,
- BITB_IND8, BITB_IND8_2, BITB_IND8_3, BITB_IMM8, BITB_IND16, BITB_IND16_2, BITB_IND16_3, BITB_EXT, BITB_INDE,
+ ASRW_IND16, ASRW_IND16_3, ASRW_EXT,
+ BCLR_IND16, BCLR_IND16_3, BCLR_EXT, BCLR_IND8, BCLR_IND8_2, BCLR_IND8_3,
+ BCLRW_IND16, BCLRW_IND16_3, BCLRW_EXT,
+ BITA_IND8, BITA_IND8_3, BITA_IMM8, BITA_IND16, BITA_IND16_3, BITA_EXT, BITA_INDE,
+ BITB_IND8, BITB_IND8_3, BITB_IMM8, BITB_IND16, BITB_IND16_3, BITB_EXT, BITB_INDE,
BCC,
- BRSET_IND8, BRSET_IND8_2, BRSET_IND8_3, BRSET_IND8_4, BRSET_IND16, BRSET_IND16_2, BRSET_IND16_3, BRSET_EXT,
- BSET_IND16, BSET_IND16_2, BSET_IND16_3, BSET_EXT, BSET_IND8, BSET_IND8_2, BSET_IND8_3,
- BSETW_IND16, BSETW_IND16_2, BSETW_IND16_2B, BSETW_IND16_3, BSETW_EXT,
+ BRSET_IND8, BRSET_IND8_3, BRSET_IND8_4, BRSET_IND16, BRSET_IND16_3, BRSET_EXT,
+ BSET_IND16, BSET_IND16_3, BSET_EXT, BSET_IND8, BSET_IND8_2, BSET_IND8_3,
+ BSETW_IND16, BSETW_IND16_3, BSETW_EXT,
BSR, BSR_2, BSR_2B, BSR_3, BSR_3B,
CBA,
CLR_IND8, CLR_IND16, CLR_EXT,
@@ -70,51 +72,51 @@ enum class cpu16_device::seq : u16
CLRE,
CLRM,
CLRW_IND16, CLRW_EXT,
- CMPA_IND8, CMPA_IND8_2, CMPA_IND8_3, CMPA_IMM8, CMPA_IND16, CMPA_IND16_2, CMPA_IND16_3, CMPA_EXT, CMPA_INDE,
- CMPB_IND8, CMPB_IND8_2, CMPB_IND8_3, CMPB_IMM8, CMPB_IND16, CMPB_IND16_2, CMPB_IND16_3, CMPB_EXT, CMPB_INDE,
- CPD_IND8, CPD_IND8_2, CPD_IND8_2B, CPD_IND8_3, CPD_IMM16, CPD_IND16, CPD_IND16_2, CPD_IND16_2B, CPD_IND16_3, CPD_EXT, CPD_INDE,
- CPE_IMM16, CPE_IND16, CPE_IND16_2, CPE_IND16_2B, CPE_IND16_3, CPE_EXT,
- CPX_IND8, CPX_IND8_2, CPX_IND8_2B, CPX_IND8_3, CPX_IMM16, CPX_IND16, CPX_IND16_2, CPX_IND16_2B, CPX_IND16_3, CPX_EXT,
+ CMPA_IND8, CMPA_IND8_3, CMPA_IMM8, CMPA_IND16, CMPA_IND16_3, CMPA_EXT, CMPA_INDE,
+ CMPB_IND8, CMPB_IND8_3, CMPB_IMM8, CMPB_IND16, CMPB_IND16_3, CMPB_EXT, CMPB_INDE,
+ CPD_IND8, CPD_IND8_3, CPD_IMM16, CPD_IND16, CPD_IND16_3, CPD_EXT, CPD_INDE,
+ CPE_IMM16, CPE_IND16, CPE_IND16_3, CPE_EXT,
+ CPX_IND8, CPX_IND8_3, CPX_IMM16, CPX_IND16, CPX_IND16_3, CPX_EXT,
DAA,
- DEC_IND8, DEC_IND8_2, DEC_IND8_3, DEC_IND16, DEC_IND16_2, DEC_IND16_3, DEC_EXT,
+ DEC_IND8, DEC_IND8_3, DEC_IND16, DEC_IND16_3, DEC_EXT,
DECA,
DECB,
- DECW_IND16, DECW_IND16_2, DECW_IND16_2B, DECW_IND16_3, DECW_EXT,
+ DECW_IND16, DECW_IND16_3, DECW_EXT,
DIV, DIV_2, DIV_3, DIV_4, DIV_5, DIV_6, DIV_7, DIV_8, DIV_9, DIV_10, DIV_11,
EMUL, EMUL_2, EMUL_3, EMUL_4, EMUL_5,
EMULS, EMULS_2, EMULS_3, EMULS_4,
- EORA_IND8, EORA_IND8_2, EORA_IND8_3, EORA_IMM8, EORA_IND16, EORA_IND16_2, EORA_IND16_3, EORA_EXT, EORA_INDE,
- EORB_IND8, EORB_IND8_2, EORB_IND8_3, EORB_IMM8, EORB_IND16, EORB_IND16_2, EORB_IND16_3, EORB_EXT, EORB_INDE,
- EORD_IND8, EORD_IND8_2, EORD_IND8_2B, EORD_IND8_3, EORD_IMM16, EORD_IND16, EORD_IND16_2, EORD_IND16_2B, EORD_IND16_3, EORD_EXT, EORD_INDE,
- EORE_IMM16, EORE_IND16, EORE_IND16_2, EORE_IND16_2B, EORE_IND16_3, EORE_EXT,
- INC_IND8, INC_IND8_2, INC_IND8_3, INC_IND16, INC_IND16_2, INC_IND16_3, INC_EXT,
+ EORA_IND8, EORA_IND8_3, EORA_IMM8, EORA_IND16, EORA_IND16_3, EORA_EXT, EORA_INDE,
+ EORB_IND8, EORB_IND8_3, EORB_IMM8, EORB_IND16, EORB_IND16_3, EORB_EXT, EORB_INDE,
+ EORD_IND8, EORD_IND8_3, EORD_IMM16, EORD_IND16, EORD_IND16_3, EORD_EXT, EORD_INDE,
+ EORE_IMM16, EORE_IND16, EORE_IND16_3, EORE_EXT,
+ INC_IND8, INC_IND8_3, INC_IND16, INC_IND16_3, INC_EXT,
INCA,
INCB,
- INCW_IND16, INCW_IND16_2, INCW_IND16_2B, INCW_IND16_3, INCW_EXT,
+ INCW_IND16, INCW_IND16_3, INCW_EXT,
JMP_EXT20,
JSR_EXT20, JSR_EXT20_2, JSR_EXT20_2B, JSR_EXT20_3, JSR_EXT20_3B,
LBCC,
LBSR, LBSR_2, LBSR_2B, LBSR_3, LBSR_3B,
- LDAA_IND8, LDAA_IND8_2, LDAA_IND8_3, LDAA_IMM8, LDAA_IND16, LDAA_IND16_2, LDAA_IND16_3, LDAA_EXT, LDAA_INDE,
- LDAB_IND8, LDAB_IND8_2, LDAB_IND8_3, LDAB_IMM8, LDAB_IND16, LDAB_IND16_2, LDAB_IND16_3, LDAB_EXT, LDAB_INDE,
- LDD_IND8, LDD_IND8_2, LDD_IND8_2B, LDD_IND8_3, LDD_IMM16, LDD_IND16, LDD_IND16_2, LDD_IND16_2B, LDD_IND16_3, LDD_EXT, LDD_INDE,
- LDE_IMM16, LDE_IND16, LDE_IND16_2, LDE_IND16_2B, LDE_IND16_3, LDE_EXT,
+ LDAA_IND8, LDAA_IND8_3, LDAA_IMM8, LDAA_IND16, LDAA_IND16_3, LDAA_EXT, LDAA_INDE,
+ LDAB_IND8, LDAB_IND8_3, LDAB_IMM8, LDAB_IND16, LDAB_IND16_3, LDAB_EXT, LDAB_INDE,
+ LDD_IND8, LDD_IND8_3, LDD_IMM16, LDD_IND16, LDD_IND16_3, LDD_EXT, LDD_INDE,
+ LDE_IMM16, LDE_IND16, LDE_IND16_3, LDE_EXT,
LDED, LDED_2, LDED_2B, LDED_3, LDED_3B, LDED_4,
LDHI, LDHI_2, LDHI_2B, LDHI_3, LDHI_3B, LDHI_4,
- LDX_IND8, LDX_IND8_2, LDX_IND8_2B, LDX_IND8_3, LDX_IMM16, LDX_IND16, LDX_IND16_2, LDX_IND16_2B, LDX_IND16_3, LDX_EXT,
- MOVB_IXP_EXT, MOVB_IXP_EXT_2, MOVB_IXP_EXT_3, MOVB_EXT_IXP, MOVB_EXT_IXP_2, MOVB_EXT_IXP_3, MOVB_EXT_EXT, MOVB_EXT_EXT_2, MOVB_EXT_EXT_3,
- MOVW_IXP_EXT, MOVW_IXP_EXT_2, MOVW_IXP_EXT_2B, MOVW_IXP_EXT_3, MOVW_EXT_IXP, MOVW_EXT_IXP_2, MOVW_EXT_IXP_2B, MOVW_EXT_IXP_3, MOVW_EXT_EXT, MOVW_EXT_EXT_2, MOVW_EXT_EXT_2B, MOVW_EXT_EXT_3,
+ LDX_IND8, LDX_IND8_3, LDX_IMM16, LDX_IND16, LDX_IND16_3, LDX_EXT,
+ MOVB_IXP_EXT, MOVB_IXP_EXT_3, MOVB_EXT_IXP, MOVB_EXT_IXP_3, MOVB_EXT_EXT, MOVB_EXT_EXT_3,
+ MOVW_IXP_EXT, MOVW_IXP_EXT_3, MOVW_EXT_IXP, MOVW_EXT_IXP_3, MOVW_EXT_EXT, MOVW_EXT_EXT_3,
MUL, MUL_2, MUL_3, MUL_4, MUL_5,
- NEG_IND8, NEG_IND8_2, NEG_IND8_3, NEG_IND16, NEG_IND16_2, NEG_IND16_3, NEG_EXT,
+ NEG_IND8, NEG_IND8_3, NEG_IND16, NEG_IND16_3, NEG_EXT,
NEGA,
NEGB,
NEGD,
NEGE,
- NEGW_IND16, NEGW_IND16_2, NEGW_IND16_2B, NEGW_IND16_3, NEGW_EXT,
- ORAA_IND8, ORAA_IND8_2, ORAA_IND8_3, ORAA_IMM8, ORAA_IND16, ORAA_IND16_2, ORAA_IND16_3, ORAA_EXT, ORAA_INDE,
- ORAB_IND8, ORAB_IND8_2, ORAB_IND8_3, ORAB_IMM8, ORAB_IND16, ORAB_IND16_2, ORAB_IND16_3, ORAB_EXT, ORAB_INDE,
- ORD_IND8, ORD_IND8_2, ORD_IND8_2B, ORD_IND8_3, ORD_IMM16, ORD_IND16, ORD_IND16_2, ORD_IND16_2B, ORD_IND16_3, ORD_EXT, ORD_INDE,
- ORE_IMM16, ORE_IND16, ORE_IND16_2, ORE_IND16_2B, ORE_IND16_3, ORE_EXT,
+ NEGW_IND16, NEGW_IND16_3, NEGW_EXT,
+ ORAA_IND8, ORAA_IND8_3, ORAA_IMM8, ORAA_IND16, ORAA_IND16_3, ORAA_EXT, ORAA_INDE,
+ ORAB_IND8, ORAB_IND8_3, ORAB_IMM8, ORAB_IND16, ORAB_IND16_3, ORAB_EXT, ORAB_INDE,
+ ORD_IND8, ORD_IND8_3, ORD_IMM16, ORD_IND16, ORD_IND16_3, ORD_EXT, ORD_INDE,
+ ORE_IMM16, ORE_IND16, ORE_IND16_3, ORE_EXT,
ORP,
PSHA, PSHA_2,
PSHB,
@@ -122,16 +124,18 @@ enum class cpu16_device::seq : u16
PULA, PULA_2, PULA_3,
PULB, PULB_2, PULB_3,
PULM, PULM_0, PULM_1, PULM_2, PULM_3, PULM_4, PULM_5, PULM_6, PULM_7, PULM_8, PULM_0B, PULM_1B, PULM_2B, PULM_3B, PULM_4B, PULM_5B, PULM_6B, PULM_7B,
- ROL_IND8, ROL_IND8_2, ROL_IND8_3, ROL_IND16, ROL_IND16_2, ROL_IND16_3, ROL_EXT,
+ ROL_IND8, ROL_IND8_3, ROL_IND16, ROL_IND16_3, ROL_EXT,
ROLA,
ROLB,
ROLD,
ROLE,
- ROR_IND8, ROR_IND8_2, ROR_IND8_3, ROR_IND16, ROR_IND16_2, ROR_IND16_3, ROR_EXT,
+ ROLW_IND16, ROLW_IND16_3, ROLW_EXT,
+ ROR_IND8, ROR_IND8_3, ROR_IND16, ROR_IND16_3, ROR_EXT,
RORA,
RORB,
RORD,
RORE,
+ RORW_IND16, RORW_IND16_3, RORW_EXT,
RTS, RTS_2, RTS_2B, RTS_3, RTS_3B, RTS_4,
SBA,
SDE,
@@ -141,10 +145,10 @@ enum class cpu16_device::seq : u16
STE_IND16, STE_EXT,
STED, STED_2, STED_2B,
STX_IND8, STX_IND16, STX_EXT,
- SUBA_IND8, SUBA_IND8_2, SUBA_IND8_3, SUBA_IMM8, SUBA_IND16, SUBA_IND16_2, SUBA_IND16_3, SUBA_EXT, SUBA_INDE, SUBA_INDE_2, SUBA_INDE_3,
- SUBB_IND8, SUBB_IND8_2, SUBB_IND8_3, SUBB_IMM8, SUBB_IND16, SUBB_IND16_2, SUBB_IND16_3, SUBB_EXT, SUBB_INDE, SUBB_INDE_2, SUBB_INDE_3,
- SUBD_IND8, SUBD_IND8_2, SUBD_IND8_2B, SUBD_IND8_3, SUBD_IMM16, SUBD_IND16, SUBD_IND16_2, SUBD_IND16_2B, SUBD_IND16_3, SUBD_EXT, SUBD_INDE, SUBD_INDE_2, SUBD_INDE_2B, SUBD_INDE_3,
- SUBE_IMM16, SUBE_IND16, SUBE_IND16_2, SUBE_IND16_2B, SUBE_IND16_3, SUBE_EXT,
+ SUBA_IND8, SUBA_IND8_3, SUBA_IMM8, SUBA_IND16, SUBA_IND16_3, SUBA_EXT, SUBA_INDE, SUBA_INDE_3,
+ SUBB_IND8, SUBB_IND8_3, SUBB_IMM8, SUBB_IND16, SUBB_IND16_3, SUBB_EXT, SUBB_INDE, SUBB_INDE_3,
+ SUBD_IND8, SUBD_IND8_3, SUBD_IMM16, SUBD_IND16, SUBD_IND16_3, SUBD_EXT, SUBD_INDE, SUBD_INDE_3,
+ SUBE_IMM16, SUBE_IND16, SUBE_IND16_3, SUBE_EXT,
SXT,
TAB,
TAP,
@@ -158,12 +162,12 @@ enum class cpu16_device::seq : u16
TEKB,
TPA,
TPD,
- TST_IND8, TST_IND8_2, TST_IND8_3, TST_IND16, TST_IND16_2, TST_IND16_3, TST_EXT,
+ TST_IND8, TST_IND8_3, TST_IND16, TST_IND16_3, TST_EXT,
TSTA,
TSTB,
TSTD,
TSTE,
- TSTW_IND16, TSTW_IND16_2, TSTW_IND16_2B, TSTW_IND16_3, TSTW_EXT,
+ TSTW_IND16, TSTW_IND16_3, TSTW_EXT,
TSX,
TXKB,
TXS,
@@ -198,6 +202,7 @@ cpu16_device::cpu16_device(const machine_config &mconfig, device_type type, cons
, m_sl(false)
, m_index_mask{0, 0}
, m_sequence(seq::BOOT_0)
+ , m_return_sequence(seq::BOOT_0)
, m_ea(0)
, m_tmp(0)
, m_start(false)
@@ -363,6 +368,7 @@ void cpu16_device::device_start()
save_item(NAME(m_sl));
save_item(NAME(m_index_mask));
save_item(NAME(m_sequence));
+ save_item(NAME(m_return_sequence));
save_item(NAME(m_ea));
save_item(NAME(m_tmp));
save_item(NAME(m_start));
@@ -468,14 +474,14 @@ const cpu16_device::seq cpu16_device::s_inst_decode[4][256] =
// Page 2
{
// 270X-273X
- seq::NEGW_IND16, seq::DECW_IND16, seq::NEGW_IND16, seq::INCW_IND16, seq::INVALID, seq::CLRW_IND16, seq::TSTW_IND16, seq::INVALID,
- seq::BCLRW_IND16, seq::BSETW_IND16, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID,
- seq::NEGW_IND16, seq::DECW_IND16, seq::NEGW_IND16, seq::INCW_IND16, seq::INVALID, seq::CLRW_IND16, seq::TSTW_IND16, seq::INVALID,
- seq::BCLRW_IND16, seq::BSETW_IND16, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID,
- seq::NEGW_IND16, seq::DECW_IND16, seq::NEGW_IND16, seq::INCW_IND16, seq::INVALID, seq::CLRW_IND16, seq::TSTW_IND16, seq::INVALID,
- seq::BCLRW_IND16, seq::BSETW_IND16, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID,
- seq::NEGW_EXT, seq::DECW_EXT, seq::NEGW_EXT, seq::INCW_EXT, seq::INVALID, seq::CLRW_EXT, seq::TSTW_EXT, seq::INVALID,
- seq::BCLRW_EXT, seq::BSETW_EXT, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID, seq::INVALID,
+ seq::NEGW_IND16, seq::DECW_IND16, seq::NEGW_IND16, seq::INCW_IND16, seq::ROLW_IND16, seq::CLRW_IND16, seq::TSTW_IND16, seq::INVALID,
+ seq::BCLRW_IND16, seq::BSETW_IND16, seq::INVALID, seq::INVALID, seq::ROLW_IND16, seq::ASRW_IND16, seq::RORW_IND16, seq::RORW_IND16,
+ seq::NEGW_IND16, seq::DECW_IND16, seq::NEGW_IND16, seq::INCW_IND16, seq::ROLW_IND16, seq::CLRW_IND16, seq::TSTW_IND16, seq::INVALID,
+ seq::BCLRW_IND16, seq::BSETW_IND16, seq::INVALID, seq::INVALID, seq::ROLW_IND16, seq::ASRW_IND16, seq::RORW_IND16, seq::RORW_IND16,
+ seq::NEGW_IND16, seq::DECW_IND16, seq::NEGW_IND16, seq::INCW_IND16, seq::ROLW_IND16, seq::CLRW_IND16, seq::TSTW_IND16, seq::INVALID,
+ seq::BCLRW_IND16, seq::BSETW_IND16, seq::INVALID, seq::INVALID, seq::ROLW_IND16, seq::ASRW_IND16, seq::RORW_IND16, seq::RORW_IND16,
+ seq::NEGW_EXT, seq::DECW_EXT, seq::NEGW_EXT, seq::INCW_EXT, seq::ROLW_EXT, seq::CLRW_EXT, seq::TSTW_EXT, seq::INVALID,
+ seq::BCLRW_EXT, seq::BSETW_EXT, seq::INVALID, seq::INVALID, seq::ROLW_EXT, seq::ASRW_EXT, seq::RORW_EXT, seq::RORW_EXT,
// 274X-277X
seq::SUBA_INDE, seq::ADDA_INDE, seq::SUBA_INDE, seq::ADDA_INDE, seq::EORA_INDE, seq::LDAA_INDE, seq::ANDA_INDE, seq::ORAA_INDE,
@@ -665,7 +671,7 @@ u16 cpu16_device::ror16(u16 data, bool cin) noexcept
m_ccr = (m_ccr & 0xf0ff)
| (BIT(result, 15) ? 0x0800 : 0)
| (result == 0 ? 0x0400 : 0)
- | (BIT(data, 0) != BIT(result, 7) ? 0x0200 : 0)
+ | (BIT(data, 0) != BIT(result, 15) ? 0x0200 : 0)
| (BIT(data, 0) ? 0x0100 : 0);
return result;
}
@@ -687,7 +693,7 @@ u16 cpu16_device::asr16(u16 data) noexcept
m_ccr = (m_ccr & 0xf0ff)
| (BIT(result, 15) ? 0x0800 : 0)
| (result == 0 ? 0x0400 : 0)
- | (BIT(data, 0) != BIT(result, 7) ? 0x0200 : 0)
+ | (BIT(data, 0) != BIT(result, 15) ? 0x0200 : 0)
| (BIT(data, 0) ? 0x0100 : 0);
return result;
}
@@ -1030,6 +1036,65 @@ void cpu16_device::execute_run()
m_icount -= 2;
break;
+ case seq::LOAD8_EA:
+ m_tmp = m_data.read_byte(m_ea);
+ m_sequence = m_return_sequence;
+ m_icount -= 2;
+ break;
+
+ case seq::LOAD8_EXT:
+ m_tmp = m_data.read_byte(m_ea);
+ m_sequence = m_return_sequence;
+ m_icount -= 2;
+ advance();
+ break;
+
+ case seq::LOAD16_EA:
+ if (BIT(m_ea, 0))
+ {
+ m_tmp = m_data.read_byte(m_ea);
+ m_ea = (m_ea + 1) & 0xfffff;
+ m_sequence = seq::LOAD16_EA_LSB;
+ }
+ else
+ {
+ m_tmp = m_data.read_word(m_ea);
+ m_sequence = m_return_sequence;
+ }
+ m_icount -= 2;
+ break;
+
+ case seq::LOAD16_EA_LSB:
+ m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
+ m_ea = (m_ea - 1) & 0xfffff;
+ m_sequence = m_return_sequence;
+ m_icount -= 2;
+ break;
+
+ case seq::LOAD16_EXT:
+ if (BIT(m_ea, 0))
+ {
+ m_tmp = m_data.read_byte(m_ea);
+ m_ea = (m_ea + 1) & 0xfffff;
+ m_sequence = seq::LOAD16_EXT_LSB;
+ }
+ else
+ {
+ m_tmp = m_data.read_word(m_ea);
+ m_sequence = m_return_sequence;
+ advance();
+ }
+ m_icount -= 2;
+ break;
+
+ case seq::LOAD16_EXT_LSB:
+ m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
+ m_ea = (m_ea - 1) & 0xfffff;
+ m_sequence = m_return_sequence;
+ advance();
+ m_icount -= 2;
+ break;
+
case seq::STORE8_EA:
m_data.write_word(m_ea, (m_tmp & 0x00ff) | (m_tmp << 8), BIT(m_ea, 0) ? 0x00ff : 0xff00);
m_start = true;
@@ -1093,17 +1158,12 @@ void cpu16_device::execute_run()
case seq::ADDA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ADDA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ADDA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ADDA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ADDA_IND8_3:
set_a(adc8(m_d >> 8, m_tmp, BIT(m_fetch_pipe[2], 9) && BIT(m_ccr, 8)));
m_start = true;
@@ -1121,18 +1181,12 @@ void cpu16_device::execute_run()
case seq::ADDA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ADDA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ADDA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ADDA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ADDA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_a(adc8(m_d >> 8, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
@@ -1144,7 +1198,8 @@ void cpu16_device::execute_run()
case seq::ADDA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ADDA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ADDA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1152,17 +1207,12 @@ void cpu16_device::execute_run()
case seq::ADDA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ADDA_INDE_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ADDA_INDE_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDA_INDE_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ADDA_INDE_3;
- m_icount -= 2;
- break;
-
case seq::ADDA_INDE_3:
set_a(adc8(m_d >> 8, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
m_start = true;
@@ -1173,17 +1223,12 @@ void cpu16_device::execute_run()
case seq::ADDB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ADDB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ADDB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ADDB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ADDB_IND8_3:
set_b(adc8(m_d & 0x00ff, m_tmp, BIT(m_fetch_pipe[2], 9) && BIT(m_ccr, 8)));
m_start = true;
@@ -1201,18 +1246,12 @@ void cpu16_device::execute_run()
case seq::ADDB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ADDB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ADDB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ADDB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ADDB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_b(adc8(m_d & 0x00ff, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
@@ -1224,7 +1263,8 @@ void cpu16_device::execute_run()
case seq::ADDB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ADDB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ADDB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1232,17 +1272,12 @@ void cpu16_device::execute_run()
case seq::ADDB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ADDB_INDE_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ADDB_INDE_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDB_INDE_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ADDB_INDE_3;
- m_icount -= 2;
- break;
-
case seq::ADDB_INDE_3:
set_b(adc8(m_d & 0x00ff, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
m_start = true;
@@ -1253,32 +1288,12 @@ void cpu16_device::execute_run()
case seq::ADDD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ADDD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::ADDD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ADDD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ADDD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::ADDD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ADDD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ADDD_IND8_3:
m_d = adc16(m_d, m_tmp, BIT(m_fetch_pipe[2], 9) && BIT(m_ccr, 8));
m_start = true;
@@ -1305,34 +1320,12 @@ void cpu16_device::execute_run()
case seq::ADDD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ADDD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ADDD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ADDD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ADDD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::ADDD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ADDD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ADDD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d = adc16(m_d, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8));
@@ -1344,7 +1337,8 @@ void cpu16_device::execute_run()
case seq::ADDD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ADDD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ADDD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1352,32 +1346,12 @@ void cpu16_device::execute_run()
case seq::ADDD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ADDD_INDE_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::ADDD_INDE_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDD_INDE_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ADDD_INDE_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ADDD_INDE_3;
- }
- m_icount -= 2;
- break;
-
- case seq::ADDD_INDE_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ADDD_INDE_3;
- m_icount -= 2;
- break;
-
case seq::ADDD_INDE_3:
m_d = adc16(m_d, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8));
m_start = true;
@@ -1404,34 +1378,12 @@ void cpu16_device::execute_run()
case seq::ADDE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ADDE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ADDE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ADDE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ADDE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ADDE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::ADDE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ADDE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ADDE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_e = adc16(m_e, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8));
@@ -1443,7 +1395,8 @@ void cpu16_device::execute_run()
case seq::ADDE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ADDE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ADDE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1492,17 +1445,12 @@ void cpu16_device::execute_run()
case seq::ANDA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ANDA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ANDA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ANDA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ANDA_IND8_3:
m_d &= m_tmp << 8 | 0x00ff;
set_nzv8(m_d >> 8, false);
@@ -1522,18 +1470,12 @@ void cpu16_device::execute_run()
case seq::ANDA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ANDA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ANDA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ANDA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ANDA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d &= m_tmp << 8 | 0x00ff;
@@ -1546,7 +1488,8 @@ void cpu16_device::execute_run()
case seq::ANDA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ANDA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ANDA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1554,7 +1497,8 @@ void cpu16_device::execute_run()
case seq::ANDA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ANDA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ANDA_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -1562,17 +1506,12 @@ void cpu16_device::execute_run()
case seq::ANDB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ANDB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ANDB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ANDB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ANDB_IND8_3:
m_d &= m_tmp | 0xff00;
set_nzv8(m_d & 0x00ff, false);
@@ -1592,18 +1531,12 @@ void cpu16_device::execute_run()
case seq::ANDB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ANDB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ANDB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ANDB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ANDB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d &= m_tmp | 0xff00;
@@ -1616,7 +1549,8 @@ void cpu16_device::execute_run()
case seq::ANDB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ANDB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ANDB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1624,7 +1558,8 @@ void cpu16_device::execute_run()
case seq::ANDB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ANDB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ANDB_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -1632,32 +1567,12 @@ void cpu16_device::execute_run()
case seq::ANDD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ANDD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::ANDD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ANDD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ANDD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::ANDD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ANDD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ANDD_IND8_3:
m_d &= m_tmp;
set_nzv16(m_d, false);
@@ -1678,34 +1593,12 @@ void cpu16_device::execute_run()
case seq::ANDD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ANDD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ANDD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ANDD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ANDD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::ANDD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ANDD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ANDD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d &= m_tmp;
@@ -1718,7 +1611,8 @@ void cpu16_device::execute_run()
case seq::ANDD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ANDD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ANDD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1726,7 +1620,8 @@ void cpu16_device::execute_run()
case seq::ANDD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ANDD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::ANDD_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -1743,34 +1638,12 @@ void cpu16_device::execute_run()
case seq::ANDE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ANDE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ANDE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ANDE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ANDE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ANDE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::ANDE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ANDE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ANDE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_e &= m_tmp;
@@ -1783,7 +1656,8 @@ void cpu16_device::execute_run()
case seq::ANDE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ANDE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ANDE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1800,17 +1674,12 @@ void cpu16_device::execute_run()
case seq::ASR_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ASR_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ASR_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ASR_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ASR_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ASR_IND8_3:
m_tmp = asr8(m_tmp);
m_sequence = seq::STORE8_EA;
@@ -1820,18 +1689,12 @@ void cpu16_device::execute_run()
case seq::ASR_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ASR_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ASR_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ASR_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ASR_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ASR_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp = asr8(m_tmp);
@@ -1842,7 +1705,8 @@ void cpu16_device::execute_run()
case seq::ASR_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ASR_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ASR_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1875,18 +1739,37 @@ void cpu16_device::execute_run()
m_icount -= 2;
break;
- case seq::BCLR_IND16:
+ case seq::ASRW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
- m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BCLR_IND16_2;
+ m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ASRW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BCLR_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BCLR_IND16_3;
- advance();
+ case seq::ASRW_IND16_3:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_tmp = asr16(m_tmp);
+ m_sequence = seq::STORE16_EA;
+ m_icount -= 2;
+ break;
+
+ case seq::ASRW_EXT:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ASRW_IND16_3;
+ m_start = false;
+ m_icount -= 2;
+ break;
+
+ case seq::BCLR_IND16:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BCLR_IND16_3;
+ m_start = false;
m_icount -= 2;
break;
@@ -1901,7 +1784,8 @@ void cpu16_device::execute_run()
case seq::BCLR_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BCLR_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BCLR_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1932,35 +1816,12 @@ void cpu16_device::execute_run()
case seq::BCLRW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BCLRW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::BCLRW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BCLRW_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::BCLRW_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::BCLRW_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::BCLRW_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_ea = (m_ea - 1) & 0xfffff;
- m_sequence = seq::BCLRW_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::BCLRW_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp &= ~m_fetch_pipe[1];
@@ -1972,7 +1833,8 @@ void cpu16_device::execute_run()
case seq::BCLRW_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BCLRW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::BCLRW_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -1980,17 +1842,12 @@ void cpu16_device::execute_run()
case seq::BITA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::BITA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::BITA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BITA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BITA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::BITA_IND8_3:
set_nzv8((m_d >> 8) & m_tmp, false);
m_start = true;
@@ -2008,18 +1865,12 @@ void cpu16_device::execute_run()
case seq::BITA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BITA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BITA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BITA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BITA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::BITA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv8((m_d >> 8) & m_tmp, false);
@@ -2031,7 +1882,8 @@ void cpu16_device::execute_run()
case seq::BITA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BITA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BITA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2039,7 +1891,8 @@ void cpu16_device::execute_run()
case seq::BITA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::BITA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::BITA_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -2047,17 +1900,12 @@ void cpu16_device::execute_run()
case seq::BITB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::BITB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::BITB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BITB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BITB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::BITB_IND8_3:
set_nzv8(m_d & m_tmp & 0x00ff, false);
m_start = true;
@@ -2075,18 +1923,12 @@ void cpu16_device::execute_run()
case seq::BITB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BITB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BITB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BITB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BITB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::BITB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv8(m_d & m_tmp & 0x00ff, false);
@@ -2098,7 +1940,8 @@ void cpu16_device::execute_run()
case seq::BITB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BITB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BITB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2106,7 +1949,8 @@ void cpu16_device::execute_run()
case seq::BITB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::BITB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::BITB_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -2126,17 +1970,12 @@ void cpu16_device::execute_run()
case seq::BRSET_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[1] >> 8)) & 0xfffff;
- m_sequence = seq::BRSET_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::BRSET_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BRSET_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BRSET_IND8_3;
- m_icount -= 2;
- break;
-
case seq::BRSET_IND8_3:
m_tmp = (BIT(m_fetch_pipe[2], 14) ? m_tmp : ~m_tmp) & m_fetch_pipe[2] & 0x00ff;
m_ea = (m_pc + 2 + s8(m_fetch_pipe[1] & 0x00fe)) & 0xfffff;
@@ -2159,18 +1998,12 @@ void cpu16_device::execute_run()
case seq::BRSET_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BRSET_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BRSET_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BRSET_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BRSET_IND16_3;
- m_icount -= 2;
- advance();
- break;
-
case seq::BRSET_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp = (BIT(m_fetch_pipe[2], 8) ? ~m_tmp : m_tmp) & m_fetch_pipe[2] & 0x00ff;
@@ -2183,7 +2016,8 @@ void cpu16_device::execute_run()
case seq::BRSET_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BRSET_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BRSET_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2191,18 +2025,12 @@ void cpu16_device::execute_run()
case seq::BSET_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BSET_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BSET_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BSET_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::BSET_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::BSET_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp |= m_fetch_pipe[2] & 0x00ff;
@@ -2214,7 +2042,8 @@ void cpu16_device::execute_run()
case seq::BSET_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BSET_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::BSET_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2245,35 +2074,12 @@ void cpu16_device::execute_run()
case seq::BSETW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::BSETW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::BSETW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::BSETW_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::BSETW_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::BSETW_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::BSETW_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_ea = (m_ea - 1) & 0xfffff;
- m_sequence = seq::BSETW_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::BSETW_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp |= m_fetch_pipe[1];
@@ -2285,7 +2091,8 @@ void cpu16_device::execute_run()
case seq::BSETW_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::BSETW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::BSETW_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2449,17 +2256,12 @@ void cpu16_device::execute_run()
case seq::CMPA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::CMPA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::CMPA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CMPA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::CMPA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::CMPA_IND8_3:
(void)sbc8(m_d >> 8, m_tmp, false);
m_start = true;
@@ -2477,18 +2279,12 @@ void cpu16_device::execute_run()
case seq::CMPA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::CMPA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::CMPA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CMPA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::CMPA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::CMPA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc8(m_d >> 8, m_tmp, false);
@@ -2500,7 +2296,8 @@ void cpu16_device::execute_run()
case seq::CMPA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::CMPA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::CMPA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2508,7 +2305,8 @@ void cpu16_device::execute_run()
case seq::CMPA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::CMPA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::CMPA_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -2516,17 +2314,12 @@ void cpu16_device::execute_run()
case seq::CMPB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::CMPB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::CMPB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CMPB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::CMPB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::CMPB_IND8_3:
(void)sbc8(m_d & 0x00ff, m_tmp, false);
m_start = true;
@@ -2544,18 +2337,12 @@ void cpu16_device::execute_run()
case seq::CMPB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::CMPB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::CMPB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CMPB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::CMPB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::CMPB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc8(m_d & 0x00ff, m_tmp, false);
@@ -2567,7 +2354,8 @@ void cpu16_device::execute_run()
case seq::CMPB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::CMPB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::CMPB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2575,7 +2363,8 @@ void cpu16_device::execute_run()
case seq::CMPB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::CMPB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::CMPB_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -2583,32 +2372,12 @@ void cpu16_device::execute_run()
case seq::CPD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::CPD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::CPD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CPD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::CPD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::CPD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::CPD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::CPD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::CPD_IND8_3:
(void)sbc16(m_d, m_tmp, false);
m_start = true;
@@ -2628,34 +2397,12 @@ void cpu16_device::execute_run()
case seq::CPD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::CPD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::CPD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CPD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::CPD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::CPD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::CPD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::CPD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::CPD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc16(m_d, m_tmp, false);
@@ -2667,7 +2414,8 @@ void cpu16_device::execute_run()
case seq::CPD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::CPD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::CPD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2675,7 +2423,8 @@ void cpu16_device::execute_run()
case seq::CPD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::CPD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::CPD_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -2692,34 +2441,12 @@ void cpu16_device::execute_run()
case seq::CPE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::CPE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::CPE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CPE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::CPE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::CPE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::CPE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::CPE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::CPE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc16(m_e, m_tmp, false);
@@ -2731,7 +2458,8 @@ void cpu16_device::execute_run()
case seq::CPE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::CPE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::CPE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2739,32 +2467,12 @@ void cpu16_device::execute_run()
case seq::CPX_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::CPX_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::CPX_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CPX_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::CPX_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::CPX_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::CPX_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::CPX_IND8_3;
- m_icount -= 2;
- break;
-
case seq::CPX_IND8_3:
(void)sbc16(get_ix(BIT(m_fetch_pipe[2], 8, 2)), m_tmp, false);
m_start = true;
@@ -2784,34 +2492,12 @@ void cpu16_device::execute_run()
case seq::CPX_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::CPX_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::CPX_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::CPX_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::CPX_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::CPX_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::CPX_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::CPX_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::CPX_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc16(get_ix(BIT(m_fetch_pipe[2], 0, 2)), m_tmp, false);
@@ -2823,7 +2509,8 @@ void cpu16_device::execute_run()
case seq::CPX_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::CPX_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::CPX_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2852,17 +2539,12 @@ void cpu16_device::execute_run()
case seq::DEC_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::DEC_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::DEC_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::DEC_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::DEC_IND8_3;
- m_icount -= 2;
- break;
-
case seq::DEC_IND8_3:
--m_tmp;
set_nzv8(m_tmp, m_tmp == 0x007f);
@@ -2873,18 +2555,12 @@ void cpu16_device::execute_run()
case seq::DEC_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::DEC_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::DEC_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::DEC_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::DEC_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::DEC_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
--m_tmp;
@@ -2896,7 +2572,8 @@ void cpu16_device::execute_run()
case seq::DEC_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::DEC_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::DEC_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -2920,35 +2597,12 @@ void cpu16_device::execute_run()
case seq::DECW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::DECW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::DECW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::DECW_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::DECW_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::DECW_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::DECW_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_ea = (m_ea - 1) & 0xfffff;
- m_sequence = seq::DECW_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::DECW_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
--m_tmp;
@@ -2960,7 +2614,8 @@ void cpu16_device::execute_run()
case seq::DECW_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::DECW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::DECW_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3080,17 +2735,12 @@ void cpu16_device::execute_run()
case seq::EORA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::EORA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::EORA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::EORA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::EORA_IND8_3:
m_d ^= m_tmp << 8;
set_nzv8(m_d >> 8, false);
@@ -3110,18 +2760,12 @@ void cpu16_device::execute_run()
case seq::EORA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::EORA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::EORA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::EORA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::EORA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d ^= m_tmp << 8;
@@ -3134,7 +2778,8 @@ void cpu16_device::execute_run()
case seq::EORA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::EORA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::EORA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3142,7 +2787,8 @@ void cpu16_device::execute_run()
case seq::EORA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::EORA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::EORA_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -3150,17 +2796,12 @@ void cpu16_device::execute_run()
case seq::EORB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::EORB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::EORB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::EORB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::EORB_IND8_3:
m_d ^= m_tmp & 0x00ff;
set_nzv8(m_d & 0x00ff, false);
@@ -3180,18 +2821,12 @@ void cpu16_device::execute_run()
case seq::EORB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::EORB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::EORB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::EORB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::EORB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d ^= m_tmp & 0x00ff;
@@ -3204,7 +2839,8 @@ void cpu16_device::execute_run()
case seq::EORB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::EORB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::EORB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3212,7 +2848,8 @@ void cpu16_device::execute_run()
case seq::EORB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::EORB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::EORB_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -3220,32 +2857,12 @@ void cpu16_device::execute_run()
case seq::EORD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::EORD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::EORD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::EORD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::EORD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::EORD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::EORD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::EORD_IND8_3:
m_d ^= m_tmp;
set_nzv16(m_d, false);
@@ -3266,34 +2883,12 @@ void cpu16_device::execute_run()
case seq::EORD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::EORD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::EORD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::EORD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::EORD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::EORD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::EORD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::EORD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d ^= m_tmp;
@@ -3306,7 +2901,8 @@ void cpu16_device::execute_run()
case seq::EORD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::EORD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::EORD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3314,7 +2910,8 @@ void cpu16_device::execute_run()
case seq::EORD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::EORD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::EORD_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -3331,34 +2928,12 @@ void cpu16_device::execute_run()
case seq::EORE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::EORE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::EORE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::EORE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::EORE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::EORE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::EORE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::EORE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::EORE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_e &= m_tmp;
@@ -3371,7 +2946,8 @@ void cpu16_device::execute_run()
case seq::EORE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::EORE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::EORE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3379,17 +2955,12 @@ void cpu16_device::execute_run()
case seq::INC_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::INC_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::INC_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::INC_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::INC_IND8_3;
- m_icount -= 2;
- break;
-
case seq::INC_IND8_3:
++m_tmp;
set_nzv8(m_tmp, m_tmp == 0x0080);
@@ -3400,18 +2971,12 @@ void cpu16_device::execute_run()
case seq::INC_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::INC_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::INC_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::INC_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::INC_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::INC_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
++m_tmp;
@@ -3423,7 +2988,8 @@ void cpu16_device::execute_run()
case seq::INC_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::INC_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::INC_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3447,35 +3013,12 @@ void cpu16_device::execute_run()
case seq::INCW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::INCW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::INCW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::INCW_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::INCW_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::INCW_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::INCW_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_ea = (m_ea - 1) & 0xfffff;
- m_sequence = seq::INCW_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::INCW_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
++m_tmp;
@@ -3487,7 +3030,8 @@ void cpu16_device::execute_run()
case seq::INCW_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::INCW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::INCW_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3633,17 +3177,12 @@ void cpu16_device::execute_run()
case seq::LDAA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::LDAA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::LDAA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDAA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::LDAA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::LDAA_IND8_3:
set_a(m_tmp);
set_nzv8(m_tmp, false);
@@ -3663,18 +3202,12 @@ void cpu16_device::execute_run()
case seq::LDAA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::LDAA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::LDAA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDAA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::LDAA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::LDAA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_a(m_tmp);
@@ -3687,7 +3220,8 @@ void cpu16_device::execute_run()
case seq::LDAA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::LDAA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::LDAA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3695,7 +3229,8 @@ void cpu16_device::execute_run()
case seq::LDAA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::LDAA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::LDAA_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -3703,17 +3238,12 @@ void cpu16_device::execute_run()
case seq::LDAB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::LDAB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::LDAB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDAB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::LDAB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::LDAB_IND8_3:
set_b(m_tmp);
set_nzv8(m_tmp, false);
@@ -3733,18 +3263,12 @@ void cpu16_device::execute_run()
case seq::LDAB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::LDAB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::LDAB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDAB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::LDAB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::LDAB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_b(m_tmp);
@@ -3757,7 +3281,8 @@ void cpu16_device::execute_run()
case seq::LDAB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::LDAB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::LDAB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3765,7 +3290,8 @@ void cpu16_device::execute_run()
case seq::LDAB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::LDAB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::LDAB_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -3773,32 +3299,12 @@ void cpu16_device::execute_run()
case seq::LDD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::LDD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::LDD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::LDD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::LDD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::LDD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::LDD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::LDD_IND8_3:
m_d = m_tmp;
set_nzv16(m_tmp, false);
@@ -3819,34 +3325,12 @@ void cpu16_device::execute_run()
case seq::LDD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::LDD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::LDD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::LDD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::LDD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::LDD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::LDD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::LDD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d = m_tmp;
@@ -3859,7 +3343,8 @@ void cpu16_device::execute_run()
case seq::LDD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::LDD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::LDD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -3867,7 +3352,8 @@ void cpu16_device::execute_run()
case seq::LDD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::LDD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::LDD_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -3884,34 +3370,12 @@ void cpu16_device::execute_run()
case seq::LDE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::LDE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::LDE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::LDE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::LDE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::LDE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::LDE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::LDE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_e = m_tmp;
@@ -3924,7 +3388,8 @@ void cpu16_device::execute_run()
case seq::LDE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::LDE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::LDE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4055,32 +3520,12 @@ void cpu16_device::execute_run()
case seq::LDX_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::LDX_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::LDX_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDX_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::LDX_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::LDX_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::LDX_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::LDX_IND8_3;
- m_icount -= 2;
- break;
-
case seq::LDX_IND8_3:
set_ix(BIT(m_fetch_pipe[2], 8, 2), m_tmp);
set_nzv16(m_tmp, false);
@@ -4101,33 +3546,12 @@ void cpu16_device::execute_run()
case seq::LDX_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::LDX_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::LDX_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::LDX_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::LDX_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::LDX_IND16_3;
- }
- m_icount -= 2;
- break;
-
- case seq::LDX_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::LDX_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::LDX_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_ix(BIT(m_fetch_pipe[2], 0, 2), m_tmp);
@@ -4140,7 +3564,8 @@ void cpu16_device::execute_run()
case seq::LDX_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::LDX_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::LDX_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4149,18 +3574,12 @@ void cpu16_device::execute_run()
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = m_index_regs[0];
m_index_regs[0] = u32(m_ek) << 16 | m_fetch_pipe[1]; // HACK: save destination in XK:IX to prevent it from being overwritten
- m_sequence = seq::MOVB_IXP_EXT_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::MOVB_IXP_EXT_3;
m_start = false;
m_icount -= 2;
break;
- case seq::MOVB_IXP_EXT_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::MOVB_IXP_EXT_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::MOVB_IXP_EXT_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv8(m_tmp, false);
@@ -4173,18 +3592,12 @@ void cpu16_device::execute_run()
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = m_index_regs[0];
m_index_regs[0] = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::MOVB_EXT_IXP_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::MOVB_EXT_IXP_3;
m_start = false;
m_icount -= 2;
break;
- case seq::MOVB_EXT_IXP_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::MOVB_EXT_IXP_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::MOVB_EXT_IXP_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv8(m_tmp, false);
@@ -4197,18 +3610,12 @@ void cpu16_device::execute_run()
case seq::MOVB_EXT_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::MOVB_EXT_EXT_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::MOVB_EXT_EXT_3;
m_start = false;
m_icount -= 2;
break;
- case seq::MOVB_EXT_EXT_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::MOVB_EXT_EXT_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::MOVB_EXT_EXT_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv8(m_tmp, false);
@@ -4221,35 +3628,12 @@ void cpu16_device::execute_run()
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = m_index_regs[0];
m_index_regs[0] = u32(m_ek) << 16 | m_fetch_pipe[1]; // HACK: save destination in XK:IX to prevent it from being overwritten
- m_sequence = seq::MOVW_IXP_EXT_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::MOVW_IXP_EXT_3;
m_start = false;
m_icount -= 2;
break;
- case seq::MOVW_IXP_EXT_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::MOVW_IXP_EXT_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::MOVW_IXP_EXT_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::MOVW_IXP_EXT_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_ea = (m_ea - 1) & 0xfffff;
- m_sequence = seq::MOVW_IXP_EXT_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::MOVW_IXP_EXT_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv16(m_tmp, false);
@@ -4262,34 +3646,12 @@ void cpu16_device::execute_run()
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = m_index_regs[0];
m_index_regs[0] = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::MOVW_EXT_IXP_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::MOVW_EXT_IXP_3;
m_start = false;
m_icount -= 2;
break;
- case seq::MOVW_EXT_IXP_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::MOVW_EXT_IXP_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::MOVW_EXT_IXP_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::MOVW_EXT_IXP_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::MOVW_EXT_IXP_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::MOVW_EXT_IXP_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv8(m_tmp, false);
@@ -4302,34 +3664,12 @@ void cpu16_device::execute_run()
case seq::MOVW_EXT_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::MOVW_EXT_EXT_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::MOVW_EXT_EXT_3;
m_start = false;
m_icount -= 2;
break;
- case seq::MOVW_EXT_EXT_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::MOVW_EXT_EXT_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::MOVW_EXT_EXT_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::MOVW_EXT_EXT_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::MOVW_EXT_EXT_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::MOVW_EXT_EXT_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_nzv16(m_tmp, false);
@@ -4370,17 +3710,12 @@ void cpu16_device::execute_run()
case seq::NEG_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::NEG_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::NEG_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::NEG_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::NEG_IND8_3;
- m_icount -= 2;
- break;
-
case seq::NEG_IND8_3:
m_tmp = sbc8(0, m_tmp, !BIT(m_fetch_pipe[2], 1));
m_sequence = seq::STORE8_EA;
@@ -4390,18 +3725,12 @@ void cpu16_device::execute_run()
case seq::NEG_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::NEG_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::NEG_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::NEG_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::NEG_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::NEG_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp = sbc8(0, m_tmp, !BIT(m_fetch_pipe[2], 1));
@@ -4412,7 +3741,8 @@ void cpu16_device::execute_run()
case seq::NEG_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::NEG_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::NEG_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4448,35 +3778,12 @@ void cpu16_device::execute_run()
case seq::NEGW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::NEGW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::NEGW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::NEGW_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::NEGW_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::NEGW_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::NEGW_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_ea = (m_ea - 1) & 0xfffff;
- m_sequence = seq::NEGW_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::NEGW_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp = sbc16(0, m_tmp, !BIT(m_fetch_pipe[2], 1));
@@ -4488,7 +3795,8 @@ void cpu16_device::execute_run()
case seq::NEGW_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::NEGW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::NEGW_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4496,17 +3804,12 @@ void cpu16_device::execute_run()
case seq::ORAA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ORAA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ORAA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORAA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ORAA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ORAA_IND8_3:
m_d |= m_tmp << 8;
set_nzv8(m_d >> 8, false);
@@ -4526,18 +3829,12 @@ void cpu16_device::execute_run()
case seq::ORAA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ORAA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ORAA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORAA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ORAA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ORAA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d |= m_tmp << 8;
@@ -4550,7 +3847,8 @@ void cpu16_device::execute_run()
case seq::ORAA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ORAA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ORAA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4558,7 +3856,8 @@ void cpu16_device::execute_run()
case seq::ORAA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ORAA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ORAA_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -4566,17 +3865,12 @@ void cpu16_device::execute_run()
case seq::ORAB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ORAB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ORAB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORAB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ORAB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ORAB_IND8_3:
m_d |= m_tmp & 0x00ff;
set_nzv8(m_d & 0x00ff, false);
@@ -4596,18 +3890,12 @@ void cpu16_device::execute_run()
case seq::ORAB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ORAB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ORAB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORAB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ORAB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ORAB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d |= m_tmp & 0x00ff;
@@ -4620,7 +3908,8 @@ void cpu16_device::execute_run()
case seq::ORAB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ORAB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ORAB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4628,7 +3917,8 @@ void cpu16_device::execute_run()
case seq::ORAB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ORAB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ORAB_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -4636,32 +3926,12 @@ void cpu16_device::execute_run()
case seq::ORD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ORD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::ORD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ORD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ORD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::ORD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ORD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ORD_IND8_3:
m_d |= m_tmp;
set_nzv16(m_d, false);
@@ -4682,34 +3952,12 @@ void cpu16_device::execute_run()
case seq::ORD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ORD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ORD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ORD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ORD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::ORD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ORD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ORD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d |= m_tmp;
@@ -4722,7 +3970,8 @@ void cpu16_device::execute_run()
case seq::ORD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ORD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ORD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4730,7 +3979,8 @@ void cpu16_device::execute_run()
case seq::ORD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::ORD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::ORD_IND8_3;
m_start = false;
m_icount -= 2;
break;
@@ -4747,34 +3997,12 @@ void cpu16_device::execute_run()
case seq::ORE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ORE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ORE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ORE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::ORE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::ORE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::ORE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::ORE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ORE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_e &= m_tmp;
@@ -4787,7 +4015,8 @@ void cpu16_device::execute_run()
case seq::ORE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ORE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ORE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -4974,17 +4203,12 @@ void cpu16_device::execute_run()
case seq::ROL_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ROL_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ROL_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ROL_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ROL_IND8_3;
- m_icount -= 2;
- break;
-
case seq::ROL_IND8_3:
m_tmp = rol8(m_tmp, BIT(m_fetch_pipe[2], 11) && BIT(m_ccr, 8));
m_sequence = seq::STORE8_EA;
@@ -4994,18 +4218,12 @@ void cpu16_device::execute_run()
case seq::ROL_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ROL_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ROL_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ROL_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ROL_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ROL_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp = rol8(m_tmp, BIT(m_fetch_pipe[2], 3) && BIT(m_ccr, 8));
@@ -5016,7 +4234,8 @@ void cpu16_device::execute_run()
case seq::ROL_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ROL_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ROL_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5049,17 +4268,37 @@ void cpu16_device::execute_run()
m_icount -= 2;
break;
- case seq::ROR_IND8:
+ case seq::ROLW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
- m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::ROR_IND8_2;
+ m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ROLW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ROR_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ROR_IND8_3;
+ case seq::ROLW_IND16_3:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_tmp = rol16(m_tmp, BIT(m_fetch_pipe[2], 3) && BIT(m_ccr, 8));
+ m_sequence = seq::STORE16_EA;
+ m_icount -= 2;
+ break;
+
+ case seq::ROLW_EXT:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::ROLW_IND16_3;
+ m_start = false;
+ m_icount -= 2;
+ break;
+
+ case seq::ROR_IND8:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::ROR_IND8_3;
+ m_start = false;
m_icount -= 2;
break;
@@ -5072,18 +4311,12 @@ void cpu16_device::execute_run()
case seq::ROR_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::ROR_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ROR_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::ROR_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::ROR_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::ROR_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_tmp = ror8(m_tmp, !BIT(m_fetch_pipe[2], 0) && BIT(m_ccr, 8));
@@ -5094,7 +4327,8 @@ void cpu16_device::execute_run()
case seq::ROR_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::ROR_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::ROR_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5127,6 +4361,31 @@ void cpu16_device::execute_run()
m_icount -= 2;
break;
+ case seq::RORW_IND16:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::RORW_IND16_3;
+ m_start = false;
+ m_icount -= 2;
+ break;
+
+ case seq::RORW_IND16_3:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_tmp = ror16(m_tmp, !BIT(m_fetch_pipe[2], 0) && BIT(m_ccr, 8));
+ m_sequence = seq::STORE16_EA;
+ m_icount -= 2;
+ break;
+
+ case seq::RORW_EXT:
+ m_fetch_pipe[0] = m_cache.read_word(m_pc);
+ m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::RORW_IND16_3;
+ m_start = false;
+ m_icount -= 2;
+ break;
+
case seq::RTS:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_index_regs[3] = (m_index_regs[3] + 2) & 0xfffff;
@@ -5408,17 +4667,12 @@ void cpu16_device::execute_run()
case seq::SUBA_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::SUBA_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::SUBA_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBA_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::SUBA_IND8_3;
- m_icount -= 2;
- break;
-
case seq::SUBA_IND8_3:
set_a(sbc8(m_d >> 8, m_tmp, BIT(m_fetch_pipe[2], 9) && BIT(m_ccr, 8)));
m_start = true;
@@ -5436,18 +4690,12 @@ void cpu16_device::execute_run()
case seq::SUBA_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::SUBA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::SUBA_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBA_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::SUBA_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::SUBA_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_a(sbc8(m_d >> 8, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
@@ -5459,7 +4707,8 @@ void cpu16_device::execute_run()
case seq::SUBA_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::SUBA_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::SUBA_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5467,17 +4716,12 @@ void cpu16_device::execute_run()
case seq::SUBA_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::SUBA_INDE_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::SUBA_INDE_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBA_INDE_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::SUBA_INDE_3;
- m_icount -= 2;
- break;
-
case seq::SUBA_INDE_3:
set_a(sbc8(m_d >> 8, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
m_start = true;
@@ -5488,17 +4732,12 @@ void cpu16_device::execute_run()
case seq::SUBB_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::SUBB_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::SUBB_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBB_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::SUBB_IND8_3;
- m_icount -= 2;
- break;
-
case seq::SUBB_IND8_3:
set_b(sbc8(m_d & 0x00ff, m_tmp, BIT(m_fetch_pipe[2], 9) && BIT(m_ccr, 8)));
m_start = true;
@@ -5516,18 +4755,12 @@ void cpu16_device::execute_run()
case seq::SUBB_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::SUBB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::SUBB_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBB_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::SUBB_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::SUBB_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
set_b(sbc8(m_d & 0x00ff, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
@@ -5539,7 +4772,8 @@ void cpu16_device::execute_run()
case seq::SUBB_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::SUBB_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::SUBB_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5547,17 +4781,12 @@ void cpu16_device::execute_run()
case seq::SUBB_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::SUBB_INDE_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::SUBB_INDE_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBB_INDE_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::SUBB_INDE_3;
- m_icount -= 2;
- break;
-
case seq::SUBB_INDE_3:
set_b(sbc8(m_d & 0x00ff, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8)));
m_start = true;
@@ -5568,32 +4797,12 @@ void cpu16_device::execute_run()
case seq::SUBD_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::SUBD_IND8_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::SUBD_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBD_IND8_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::SUBD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::SUBD_IND8_3;
- }
- m_icount -= 2;
- break;
-
- case seq::SUBD_IND8_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::SUBD_IND8_3;
- m_icount -= 2;
- break;
-
case seq::SUBD_IND8_3:
m_d = sbc16(m_d, m_tmp, BIT(m_fetch_pipe[2], 9) && BIT(m_ccr, 8));
m_start = true;
@@ -5613,34 +4822,12 @@ void cpu16_device::execute_run()
case seq::SUBD_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::SUBD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::SUBD_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBD_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::SUBD_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::SUBD_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::SUBD_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::SUBD_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::SUBD_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_d = sbc16(m_d, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8));
@@ -5652,7 +4839,8 @@ void cpu16_device::execute_run()
case seq::SUBD_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::SUBD_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::SUBD_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5660,32 +4848,12 @@ void cpu16_device::execute_run()
case seq::SUBD_INDE:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_e)) & 0xfffff;
- m_sequence = seq::SUBD_INDE_2;
+ m_sequence = seq::LOAD16_EA;
+ m_return_sequence = seq::SUBD_INDE_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBD_INDE_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::SUBD_IND8_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::SUBD_INDE_3;
- }
- m_icount -= 2;
- break;
-
- case seq::SUBD_INDE_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::SUBD_INDE_3;
- m_icount -= 2;
- break;
-
case seq::SUBD_INDE_3:
m_d = sbc16(m_d, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8));
m_start = true;
@@ -5705,34 +4873,12 @@ void cpu16_device::execute_run()
case seq::SUBE_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::SUBE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::SUBE_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::SUBE_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::SUBE_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::SUBE_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::SUBE_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::SUBE_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::SUBE_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_e = sbc16(m_e, m_tmp, BIT(m_fetch_pipe[2], 1) && BIT(m_ccr, 8));
@@ -5744,7 +4890,8 @@ void cpu16_device::execute_run()
case seq::SUBE_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u32(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::SUBE_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::SUBE_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5853,17 +5000,12 @@ void cpu16_device::execute_run()
case seq::TST_IND8:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 12, 2)] + (m_fetch_pipe[2] & 0x00ff)) & 0xfffff;
- m_sequence = seq::TST_IND8_2;
+ m_sequence = seq::LOAD8_EA;
+ m_return_sequence = seq::TST_IND8_3;
m_start = false;
m_icount -= 2;
break;
- case seq::TST_IND8_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::TST_IND8_3;
- m_icount -= 2;
- break;
-
case seq::TST_IND8_3:
(void)sbc8(m_tmp, 0, false);
m_start = true;
@@ -5874,18 +5016,12 @@ void cpu16_device::execute_run()
case seq::TST_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::TST_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::TST_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::TST_IND16_2:
- m_tmp = m_data.read_byte(m_ea);
- m_sequence = seq::TST_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::TST_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc8(m_tmp, 0, false);
@@ -5897,7 +5033,8 @@ void cpu16_device::execute_run()
case seq::TST_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::TST_IND16_2;
+ m_sequence = seq::LOAD8_EXT;
+ m_return_sequence = seq::TST_IND16_3;
m_start = false;
m_icount -= 2;
break;
@@ -5933,34 +5070,12 @@ void cpu16_device::execute_run()
case seq::TSTW_IND16:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = (m_index_regs[BIT(m_fetch_pipe[2], 4, 2)] + s16(m_fetch_pipe[1])) & 0xfffff;
- m_sequence = seq::TSTW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::TSTW_IND16_3;
m_start = false;
m_icount -= 2;
break;
- case seq::TSTW_IND16_2:
- if (BIT(m_ea, 0))
- {
- m_tmp = m_data.read_byte(m_ea);
- m_ea = (m_ea + 1) & 0xfffff;
- m_sequence = seq::TSTW_IND16_2B;
- }
- else
- {
- m_tmp = m_data.read_word(m_ea);
- m_sequence = seq::TSTW_IND16_3;
- advance();
- }
- m_icount -= 2;
- break;
-
- case seq::TSTW_IND16_2B:
- m_tmp = m_tmp << 8 | m_data.read_byte(m_ea);
- m_sequence = seq::TSTW_IND16_3;
- advance();
- m_icount -= 2;
- break;
-
case seq::TSTW_IND16_3:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
(void)sbc16(m_tmp, 0, false);
@@ -5972,7 +5087,8 @@ void cpu16_device::execute_run()
case seq::TSTW_EXT:
m_fetch_pipe[0] = m_cache.read_word(m_pc);
m_ea = u16(m_ek) << 16 | m_fetch_pipe[1];
- m_sequence = seq::TSTW_IND16_2;
+ m_sequence = seq::LOAD16_EXT;
+ m_return_sequence = seq::TSTW_IND16_3;
m_start = false;
m_icount -= 2;
break;