diff options
author | 2022-05-28 18:07:02 -0400 | |
---|---|---|
committer | 2022-05-28 18:09:58 -0400 | |
commit | ecd02a067f2771affa940f3e4c8b4b99069ec810 (patch) | |
tree | ebf820459ece0f52cfc3a457a6a681a8b6fdaff3 /src/devices/cpu/m68hc16/cpu16.cpp | |
parent | 439bc76f2bfdadc9581d268835f95eca6092004b (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.cpp | 1920 |
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; |